When a Rabbit queue has multiple consumers, messages received by the queue are served in a round-robin fashion to the consumers. Each message is sent to only one consumer subscribed to the queue. Let’s say you had a queue named seed_bin and consumers Farmer Bob and Farmer Esmeralda subscribed to seed_bin. As messages arrive in seed_bin, the deliveries would look like this:fetch
1 Message_A arrives in the seed_bin queue.
2 RabbitMQ sends Message_A to Farmer Bob.
3 Farmer Bob acknowledges receipt of Message_A.
4 RabbitMQ removes Message_A from the seed_bin queue.
5 Message_B arrives in the seed_bin queue.
6 RabbitMQ sends Message_B to Farmer Esmeralda.
7 Farmer Esmeralda acknowledges receipt of Message_B.
8 RabbitMQ removes Message_B from the seed_bin queue.this
摘自<RabbitMQ in Action>spa
若存在多個consumer,每一個consumer的負載可能不一樣,有些處理的快有些處理的慢,RabbitMQ並無論這些,只是簡單的以round-robin的方式分配message,這可能形成某些consumer積壓不少任務處理不完而一些consumer長期處於飢餓狀態,能夠使用prefetch_count=1的basic_qos方法可告知RabbitMQ只有在consumer處理並確認了上一個message後才分配新的message給他,不然分給另外一個空閒的consumer。ip