编程语言
首页 > 编程语言> > RocketMQ 源码之 异步和同步请求是怎么做到的

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