生產者:代碼如上一章
消費者1:代碼如前一章
消費者2:與消費者1代碼完全相同
注意:此時,消費者1和2監聽在同一個隊列上,隊列會以輪訓的方式將10個消息分別交給消費者1和2進行處理。
但是這種情況下,如果消費者1處理的消息比較繁重,而消費者2處理的消息比較輕松地話,實際上應該讓消費者2多處理一些消息,在消費者代碼添加中如下代碼:
/** * basicQos(int prefetchCount) * prefetchCount:maximum number of messages that the server will deliver, 0 if unlimited */ channel.basicQos(1);//阻止rabbitmq將消息平均分配到每一個消費者,會優先的發給不忙的消費者,如果當前的消費者在忙的話,就將消息分配給下一個消費者
不可以,多個消費者只能是不同的隊列才能實現你說的要求。
AMQP 0-9-1里已經解釋,同一隊列多個消費者時,已經內置實現了負載均衡的deliver機制,所以一個消息只能被一個消費者消費。requeued或redelivered應該不會是你想要的,如果這樣做的話自己控制RabbitMQ消息的delivery會特別麻煩
同一交換機的fanout可以輕松實現你的需求