RabbitMQ的整个通信过程

一:根据上图标注的序号来依次介绍每一步要做的事情:

1:生产者生产消息后,将消息发布给交换器黑EX;

2:交换器黑EX根据路由规则将消息路由到队列黑queue;

3:Broker再将队列黑queue中的消息投递给订阅该队列的消费者,或者是消费者从队列黑queue中获取消息;

4:给黑EX绑定一个备份交换器绿EX,当到达黑EX的消息不能被正确路由到任何队列时,被发送给备份交换器绿EX;

5:备份交换器绿EX根据路由规则将消息路由到备份队列绿queue,存储起来;

6:由于可以给消息设置过期时间,所以当队列黑queue中的消息达到过期时间仍未被消费时,会被发送到死信交换器红EX中;或者发送给消费者的消息被消费者拒绝后,也会被发送到死信交换器红EX中;

7:死信交换器红EX根据路由规则将消息路由到死信队列红queue,存储起来;

二:根据上图介绍可能涉及的知识点:

(1):当黑EX不能经过第2步将消息路由到任何队列时,则将消息发送到备份交换器绿EX,并存储到备份队列中,之后在需要的时候再去处理;有关备份交换器的介绍可以点击《备份交换器》

(2):可以设置消息在队列中的过期时间,当消息达到黑queue中,如果在过期时间到了仍未被消费,则会经过第6步和第7步将消息发送到死信队列红queue中,后续可以分析死信队列中的内容来分析当时遇到的异常情况;有关死信队列的介绍可以点击《死信队列》

(3):消息达到黑queue后,最终会经过第3步被消费者消费;消费者消费消息有两种模式:推和拉;有关消费模式的介绍可以点击《消费者的消费模式》

(4):黑queue中存放的是生产者生产的消息,最终供消费者去消费;RabbitMQ有消息确认规则,发送给消费者的消息需要等到消费者明确给出回应(确认或拒绝)后,才会在队列中做出相应的处理(从队列中删除或者保留在队列中);所以队列中的消息可以分为两部分,一部分是未发送给消费者的消息,二部分是已经发送给消费者消费,但是还未收到消费者回应的消息;有关消息队列的介绍可以点击《消息队列》

(5):消费者消费黑queue中的消息后,需要给队列一个回应,从而让队列对消费的消息做出相应的处理,这个回应可以是确认、拒绝,也可以是重发;有关消费者对消息的确认、拒绝和重发的介绍可以点击《消费者对消息的确认、拒绝和重发》。

原文地址:https://www.cnblogs.com/hzcya1995/p/13302423.html