2014-02-10 166 views
0

我有8个消费者在一个队列中,他们中的任何一个都可以接收消息,并且一旦处理完毕,就会影响数据库。大多数消息可以异步运行,但是在一些消息上,我们需要停止消耗队列,直到消息被其中一个消费者完全处理。在此期间,其他7位消费者不应该在队列中消耗。使用Rabbitmq实现阻塞消息(或在发布者和消费者之间进行确认)

有没有办法在rabbitmq中实现这一点,而不是做一个应用程序级解决方案(这可能很难实现)?

+0

当您收到同步消息时,是否需要停止处理所有消息,或者只是连续处理所有同步消息? – lreeder

+0

@lreeder当一个同步(阻塞)消息进入时,我们需要停止获取它后面的所有消息(因为必须假设阻塞消息对db/cache进行了更改来处理它们),这很容易消费者,而不是8个消费者,没有rabbitmq的帮助,我们无法控制其他7个消费者 –

回答

0

我不知道严格的RabbitMQ更改,使其工作。但是,这里的方法不需要修改任何旧代码,除了重命名生产者正在放置消息的队列。它确实需要编写一个新的消费者:

  1. 创建一个消耗单个队列,并更新您的生产者发送消息到该队列。
  2. 该队列的使用者应处理任何同步消息。
  3. 由于它是单个使用者,所有其他消息都会在队列中阻塞,直到完成处理。
  4. 单个消费者应该将任何异步消息转发给其他八个消费者处理的原始队列。

由于单个消费者只是转发异步消息,所以它可以快速完成并且不应该存在吞吐量问题。

相关问题