只向RabbitMQ中的多个消费者中的一个发送一条消息

时间:2013-05-22 23:44:49

标签: rabbitmq messaging amqp spring-amqp

我有一个与RabbitMQ有点独特的用例,我不知道如何解决这个问题。我希望有一个绑定了多个使用者的队列,然后让RabbitMQ在一次只向一个消费者发送一条消息,并在向另一个消费者发送另一条消息之前等待ACK。

我意识到这会导致吞吐量下降并且基本上会让其他消费者挨饿,但对我来说这没关系。这个奇怪的用例的原因是,消费者与之交谈的服务一次只能处理一个并发请求,所以我需要一种方法来限制这一点,但消费者也可能意外死亡,我需要另一个消费者来处理消息如果发生这种情况我知道有prefetch选项,但仍允许多个用户获得一个独占队列,但我不确定那些是否达到了我想要的效果。配置RabbitMQ是否可以这样做?

1 个答案:

答案 0 :(得分:1)

没有;没有办法限制同一队列中的竞争消费者,以便在收到确认之前,所有消费者中只有一条消息正在进行中。

前一段时间出现了类似的问题;我不记得它是在这里还是在Spring论坛中,但我相信解决方案是让消费者获得某种类型的全局锁,使用像hazelcast,甚至是简单的数据库表行锁(使用prefetch = 1)因此,每个消费者只有一个“正在处理”的消息,当每个消费者获得锁定时,该消息被处理。