RabbitMQ消息分发轮询

一,前言

 

之前我们演示了,如何通过rabbitmq实现消息队列的,而且是一个生产者对应一个消费者,那我现在想一个生产者对应多个消费者,又会有什么样的情况发生呢?

 二、逻辑图

 

2.1、no_ack参数

说明:no_ack 意思是 no acknowlargement 不确定的意思,如果这个no_ack=True 表示你服务器不care也不关心这个消息是否处理完了,但是如果你关系的话,我们就不加。一般情况下,我们是不加的,rabbitmq 默认就是说消息处理完了,自动确认。

 

 就是说如果添加no_ack=True ,生产者默认处理完,不在发送消息。

2.2、处理过程中down机

只要把这个no_ack=True注释掉,就能保证消息被完整的处理。它存在RabbitMQ的sever的那个队列里面。

三、总结

 

  1.  一个生产者对应多个消费者,生产者发送多次消息,是采用轮询的机制,公平的分给每一个消费者。
  2. 消费者代码中no_ack=True,一般情况下是不加的,保证了连接断开,消息就会转给下一个消费者。
  3. RabbitMQ判断如果socket断了,就知道连接断了,消息就会转给下一个消费者。
  4. 消费者的启动顺序,代表着是第几个消费者。
posted @ 2017-11-21 16:10  人生是一场修行  阅读(4001)  评论(0编辑  收藏  举报