@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()`

important thing ExchangeHandler  implements channelHandler 




[ Full content available at: 
https://github.com/apache/incubator-dubbo/issues/2398 ]
This message was relayed via gitbox.apache.org for [email protected]

Reply via email to