版权声明:本文为博主原创文章,未经博主允许不得转载。http://mp.blog.csdn.net/configure#i https://blog.csdn.net/wangming520liwei/article/details/88235787
Dubbo 消费者接收原理
/consumer的接收原理
NettyHandler.messageReceived
-->AbstractPeer.received
-->MultiMessageHandler.received
-->HeartbeatHandler.received
-->AllChannelHandler.received
-->ChannelEventRunnable.run //线程池 执行线程
-->DecodeHandler.received
-->HeaderExchangeHandler.received
-->handleResponse(channel, (Response) message);
-->HeaderExchangeHandler.handleResponse
-->DefaultFuture.received
-->DefaultFuture.doReceived
private void doReceived(Response res) {
lock.lock();
try {
response = res;
if (done != null) {
done.signal();
}
} finally {
lock.unlock();
}
if (callback != null) {
invokeCallback(callback);
}
}
怎么理解这个接收原理?
接收到一个请求,启动一个线程任务
{cpcn.payment.wechatmessageapi.rpc.WeChatSendingAlarmService:1.0.0:6310=com.alibaba.dubbo.registry.integration.RegistryProtocol$InvokerDelegete@73b708dc}
总结下,服务暴露 ,其实是将invoker 放到exporter中,当有消费者调用时,通过netty 接收到了 接口,参数等信息,
接收到参数信息后,组成 servicekey ,从exporterMap中找到对应的 invoker ,然后调用invoker.invoke方法得到结果