@carryxyh I don't agree with you . I find the code ChannelHandler when it use,
it is not injected through @SPI
see DubboProcotol.java
```
private ExchangeServer createServer(URL url) {
// send readonly event when server closes, it's enabled by default
url =
url.addParameterIfAbsent(Constants.CHANNEL_READONLYEVENT_SENT_KEY,
Boolean.TRUE.toString());
// enable heartbeat by default
url = url.addParameterIfAbsent(Constants.HEARTBEAT_KEY,
String.valueOf(Constants.DEFAULT_HEARTBEAT));
String str = url.getParameter(Constants.SERVER_KEY,
Constants.DEFAULT_REMOTING_SERVER);
if (str != null && str.length() > 0 &&
!ExtensionLoader.getExtensionLoader(Transporter.class).hasExtension(str))
throw new RpcException("Unsupported server type: " + str + ", url:
" + url);
url = url.addParameter(Constants.CODEC_KEY, DubboCodec.NAME);
ExchangeServer server;
try {
server = Exchangers.bind(url, requestHandler);
} catch (RemotingException e) {
throw new RpcException("Fail to start server(url: " + url + ") " +
e.getMessage(), e);
}
str = url.getParameter(Constants.CLIENT_KEY);
if (str != null && str.length() > 0) {
Set<String> supportedTypes =
ExtensionLoader.getExtensionLoader(Transporter.class).getSupportedExtensions();
if (!supportedTypes.contains(str)) {
throw new RpcException("Unsupported client type: " + str);
}
}
return server;
}
```
important code :
`
server = Exchangers.bind(url, requestHandler);`
how it create
`private ExchangeHandler requestHandler = new ExchangeHandlerAdapter()`
ExchangeHandler extends ChannelHandler which use @SPI
```
public interface ExchangeHandler extends ChannelHandler, TelnetHandler {
/**
* reply.
*
* @param channel
* @param request
* @return response
* @throws RemotingException
*/
CompletableFuture<Object> reply(ExchangeChannel channel, Object request)
throws RemotingException;
}
```
if use as extension you must have the extension name
[ Full content available at:
https://github.com/apache/incubator-dubbo/issues/2398 ]
This message was relayed via gitbox.apache.org for [email protected]