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的那个队列里面。
三、总结 |
- 一个生产者对应多个消费者,生产者发送多次消息,是采用轮询的机制,公平的分给每一个消费者。
- 消费者代码中no_ack=True,一般情况下是不加的,保证了连接断开,消息就会转给下一个消费者。
- RabbitMQ判断如果socket断了,就知道连接断了,消息就会转给下一个消费者。
- 消费者的启动顺序,代表着是第几个消费者。