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