dubbo服务暴露

主要是通过
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业务逻辑


HeartbeatHandler使用心跳机制,如果心跳结果通过在执行AllChannelHandler的线程池接收任务,线程池执行excute方法最后调用的是HeaderExchangeHandler.received()方法,如下
如果是服务提供者会调用HeaderExchangeHandler.received()方法,处理消费者请求在调用DubboProtocol.ExchangeHandlerAdapter.reply()方法根据invoke和invocation确定具体的接口和方法调用方法,并将返回结果发送给消费者(发送调用的返回结果在HeaderExchangeHandler.received()中实现)

猜你喜欢

转载自flint0006.iteye.com/blog/2389224
今日推荐