首页 > 其他 > 详细

RocketMQ 源码之 异步和同步请求是怎么做到的

时间:2020-01-28 18:59:50      阅读:147      评论:0      收藏:0      [点我收藏+]

不管是DefaultMQProducer还是DefaultMQPushConsumer,本质都是封装类,发起请求的实际上是RemotingClient,

它的start方法调用之后,启动了一个netty的客户端bootstrap,每次需要与nameService或者broker进行连接的时候,调用

getAndCreateChannel方法,从一个map中创建或者获取channel(创建的时候nameService和broker两者的区别在于addr参数是不是为null),

连接建立之后,发起请求的时候,调用的是invokeSync和invokeAsync,点进去看:

同步的实现是新建一个responseFuture,放到responseTable中(key是自增的requestId),然后调用channel.writeAndFlush(request),发起请求,

最后调用responseFuture.waitResponse,等待响应。等待用的是countDownLatch,

RocketMQ 源码之 异步和同步请求是怎么做到的

原文:https://www.cnblogs.com/chuliang/p/12238590.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!