本篇文章,我们看一下RocketMQ线程和Dubbo线程如何协作的....我们向MQ消费者发送一个消息,我们分析MQ线程是如何调用Dubbo的线程,以及接收到Dubbo的返回值之后,Dubbo线程又是如何与MQ线程交互的....MQ线程最后使用我们配置的超时时间timeout=600000,调用await(timeout)阻塞....观察线程堆栈信息,ConsumeMessageThread_1线程处于TIMED_WAITING状态.也就是说,MQ线程在调用Dubbo接口的时候,如果一直没有返回结果,那么MQ线程就会一直阻塞,直到超时...最后,MQ线程拿到返回结果,继续后面的逻辑处理.
MQ线程通过ReentrantLock和Condition与Dubbo线程完成阻塞和唤醒.