仅向RabbitMQ中的多个使用者中的一个发送一条消息

仅向RabbitMQ中的多个使用者中的一个发送一条消息,rabbitmq,messaging,amqp,spring-amqp,Rabbitmq,Messaging,Amqp,Spring Amqp,我对RabbitMQ有一个独特的用例,我不确定如何着手解决这个问题。我想让一个队列绑定多个使用者,然后让RabbitMQ一次只向一个使用者发送一条消息,并在向任何其他使用者发送另一条消息之前等待ACK 我意识到这会降低吞吐量,并会让其他消费者挨饿,但对我来说,这没关系。这种奇怪用例的原因是,消费者与之交谈的服务一次只能处理一个并发请求,因此我需要一种方法来限制这种情况,但消费者也可能意外死亡,如果发生这种情况,我需要另一个消费者来处理消息。我知道有预回迁选项,但它仍然允许多个用户获得一个独占队列

我对RabbitMQ有一个独特的用例,我不确定如何着手解决这个问题。我想让一个队列绑定多个使用者,然后让RabbitMQ一次只向一个使用者发送一条消息,并在向任何其他使用者发送另一条消息之前等待ACK


我意识到这会降低吞吐量,并会让其他消费者挨饿,但对我来说,这没关系。这种奇怪用例的原因是,消费者与之交谈的服务一次只能处理一个并发请求,因此我需要一种方法来限制这种情况,但消费者也可能意外死亡,如果发生这种情况,我需要另一个消费者来处理消息。我知道有
预回迁
选项,但它仍然允许多个用户获得一个独占队列,但我不确定这些队列是否满足我的要求。是否可以配置RabbitMQ来执行此操作?

否;无法将竞争消费者限制在同一队列中,以便在收到ack之前,所有消费者中只有一条消息在处理中


不久前也有类似的问题出现;我不记得是在这里还是在Spring论坛上,但我相信解决方案是让消费者获得某种类型的全局锁,使用类似hazelcast的东西,甚至是一个简单的数据库表行锁(prefetch=1,因此每个消费者只有一条“正在处理”的消息,在每个消费者获得锁时都会处理).

否;无法将竞争消费者限制在同一队列中,以便在收到ack之前,所有消费者中只有一条消息在处理中

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