主要是通过
ServiceConfig.export() 在调用dubboProtocol
DubboProtocol.export()->DubboProtocol.openserver()->DubboProtocol.createServer
重点就在createServer方法内的Exchangers.bind(url, requestHandler);
里面业务逻辑复杂,需要一定时间
研究,大致
理解就是使用netty建立长连接,hessian2
序列化、使用java
线程模型
threadpool及消息分发dispatcher
底层使用netty通过nettyServer建立nio服务,transportCodec先解码也就是反序列化,在
编码(序列化)使用hessian2,(之所以使用hessian2性能比java原生的好,码流小、速度快)
NettyTransporter
NettyServer
AbstractPeer
DecodeHandler
这个类也比较重要:HeaderExchangeHandler负责处理接收的请求message,并返回响应
NettyServer父类是AbstractPeer,并且AbstractPeer内将会调用HeaderExchangeHandler.received 及HeaderExchangeHandler.send()方法;所以主要看HeaderExchangeHandler业务逻辑
如果是服务提供者会调用HeaderExchangeHandler.received()方法,处理
消费者请求在调用DubboProtocol.ExchangeHandlerAdapter.reply()方法根据invoke和invocation确定具体的
接口和方法调用方法,并将返回结果发送给消费者(发送调用的返回结果在HeaderExchangeHandler.received()中实现)