【问题标题】:Scaling slightly long running Consumer work - RabbitMQ扩展稍微长时间运行的消费者工作 - RabbitMQ
【发布时间】:2018-09-30 18:40:11
【问题描述】:

我正在将 RabbitMQ 构建到我们的解决方案中,我很好奇如何有效地处理和确认消息,同时仍然在消费者代码中执行“真正的”工作,时间范围为 5 到 10 秒。 (比samples 深入研究的工作更多)。

以上是我打算处理的一个示例。我的twitter.tweet_cmd_q 队列中的一条消息,其中包含消息正文中所需的所有参数,供消费者发出实际的 Twitter API 请求,并将这些结果保存到数据库中。

但是,我在这里遇到了两个问题:

  1. 我将在一分钟内处理数千条记录 - 在确认该消息之前我不可能花 5-10 秒。消费者代码在确认消息之前处理所有需要的工作是否“正常”? (即,我可以看到确认消息,并将要在另一个线程中完成的实际工作投入处理。 - 尽管这将需要它自己的“线程”管理形式,以便系统确实承受过多的负载)。
  2. 在这种涉及查询数据并将其保存到数据库的情况下,RPC calls 是否会让我受益?

  3. 处理这种可扩展性的最佳方法是创建更多的工作实例以进行循环处理吗?

【问题讨论】:

    标签: architecture rabbitmq message-queue amqp


    【解决方案1】:

    RabbitMQ 团队会监控 the rabbitmq-users mailing list,但有时只会在 StackOverflow 上回答问题。


    Rob 的回答很棒,我只是想补充一点:

    消费者代码在确认消息之前处理所有需要的工作是否“正常”?

    如果您在处理消息之前确认该消息,并且您的消费者崩溃或未完成其任务,则该消息将丢失。这是仅在您的工作完成时才确认的主要原因。您可以在这里找到相关文档:https://www.rabbitmq.com/confirms.html

    【讨论】:

      【解决方案2】:
      1. 是的,消费者代码在确认消息之前对消息执行所需的所有操作是正常的。这就是您管理对其他工作人员的消息可见性的方式。

      2. 不,保持简单,只需在 worker 中做你需要做的事情。

      3. 有点,这不是真正的循环,只是创建更多的工人,并让他们订阅队列。每个工作人员将轮询队列,查找消息并在它们上执行。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-28
      • 2019-03-07
      • 2018-04-17
      • 2023-03-17
      • 2016-11-06
      • 1970-01-01
      • 2011-04-15
      • 2020-09-12
      相关资源
      最近更新 更多