使用Rabbitmq实现阻止消息(或在发布者和消费者之间进行调整)

时间:2014-02-10 14:29:06

标签: rabbitmq amqp ack

队列中有8个消费者,其中任何一个都可以接收消息,一旦处理完毕,就会影响数据库。大多数消息都可以异步运行,但是在一些消息上,我们需要停止消耗队列,直到消息被其中一个消费者完全处理完毕。在此期间,其他7位消费者不应该从队列中消费。

无论如何在rabbitmq中实现这一点而不是做一个应用程序级解决方案(可能很难实现)?

1 个答案:

答案 0 :(得分:0)

我不知道严格的RabbitMQ改变是否有效。但是,除了重命名生产者正在丢弃消息的队列之外,这里的方法不需要修改任何旧代码。它需要写一个新的消费者:

  1. 使用单个使用创建队列,并更新生产者以将消息发送到该队列。
  2. 该队列的使用者应该处理任何同步消息。
  3. 由于它是单个消费者,所有其他消息将在队列中阻塞,直到它完成处理。
  4. 单个使用者应将任何异步消息转发到原始队列,以供其他八个消费者处理。
  5. 由于单个消费者只是转发异步消息,因此它可以快速完成,并且吞吐量不应该存在问题。

相关问题