ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2020-01-28 18:54:02  阅读:320  来源: 互联网

标签:异步 调用 请求 responseFuture nameService broker 源码 channel RocketMQ


不管是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,

标签:异步,调用,请求,responseFuture,nameService,broker,源码,channel,RocketMQ
来源: https://www.cnblogs.com/chuliang/p/12238590.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有