我有一个可能很慢的操作和N个工作人员可以同时执行此操作。使用RabbitMQ,我想发布一条消息,其中任何一个N工人都可以处理,但只有一个非忙碌的工人会实际承担。
一个类比:有一篮子苹果和N个饥饿的人。只要将一个苹果添加到盒子中,只有1个目前没有吃的人可以带苹果。当所有人都在吃东西时,苹果会坐在那里直到有人准备吃另一个。一旦苹果被采取,没有其他人可以拥有它,因为服用它的人将不会分享。这就是我想用某种类型的RabbitMQ配置。
答案 0 :(得分:2)
您可以使用直接交换,将(消费者)预取计数设置为1并手动确认消息。这意味着消费者当时获得了一条消息,当它完成处理时,就会确认消息并确认消息。
所以预取一个人需要一个苹果
兔子mq以循环方式发送消息 - " next"不吃的人会被递给下一个苹果
手动确认 - 人吃完了,正在等待下一个苹果交给她/他。
如果预取计数是例如2,这意味着一个人说我将有两个苹果(所以有点保留它们)并且在吃第一个时没有其他人可以接受第二个苹果。 / p>
类似的用例在second tutorial中,除了那里启用了自动确认。