【问题标题】:Implementing blocking messages with Rabbitmq (or acking between publisher and consumer)使用 Rabbitmq 实现阻塞消息(或发布者和消费者之间的确认)
【发布时间】:2014-02-10 14:29:06
【问题描述】:

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

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

【问题讨论】:

  • 收到同步消息后,是需要停止处理所有消息,还是直接串行处理所有同步消息?
  • @lreeder 当同步(阻塞)消息进来时,我们需要停止获取它之后的所有消息(因为它们必须在假设阻塞消息对 db/ 进行更改的情况下进行处理缓存)这对一个消费者来说很容易,但对于 8 个消费者来说,这很容易,如果没有 rabbitmq 的帮助,我们无法控制其他 7 个消费者

标签: rabbitmq amqp ack


【解决方案1】:

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

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

由于单个消费者只是转发异步消息,它可以快速完成,吞吐量应该没有问题。

【讨论】:

    猜你喜欢
    • 2014-03-19
    • 1970-01-01
    • 1970-01-01
    • 2019-02-04
    • 1970-01-01
    • 1970-01-01
    • 2016-11-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多