2017-09-12 53 views
0

我有一個可能很慢的操作,並且有N個工作人員可以同時執行此操作。使用RabbitMQ,我想發佈一個消息,其中任何N個工作人員都可以處理,但只有一個非繁忙工作人員會實際執行。如何讓工人競相從RabbitMQ隊列中檢索消息

一個比喻:有一籃子蘋果和N個飢餓的人。一旦將一個蘋果加入盒子,只有一個當前沒有吃東西的人可以吃蘋果。當所有的人都在吃東西時,蘋果會坐在那裏,直到有人準備好吃另一個。一旦拿到蘋果,其他人就不能擁有它,因爲拿走它的人不會分享。這是我想用某種類型的RabbitMQ配置做的事情。

回答

2

您可以使用直接交換,將(消費者)預取計數設置爲1,然後手動確認消息。這意味着消費者在收到消息時會收到一條消息,當消息完成處理時,確認消息,就是這樣。

所以預取一個 - 人需要一個蘋果
兔MQ在圓形羅賓方式信息分配 - 「下一個」人不進食將交由下蘋果
手冊ACK - 人吃完並且正在等待下一個蘋果交給她/他。

如果預取計數例如是2,這意味着一個人說我會有兩個蘋果(所以請保留它們),而在第一次吃東西的時候,其他人不允許吃第二個蘋果。

類似的用例在second tutorial中,除了在那裏啓用了自動確認。

相關問題