【问题标题】:Queue processing one by one using RabbitMQ使用 RabbitMQ 一一处理队列
【发布时间】:2015-04-04 11:19:01
【问题描述】:

我有数量有限的工人和无限数量的以掩码“q.*”命名的队列(例如q.1q.2)。我需要处理它们 反过来。每个工人一项任务。当工作人员完成其任务时,它会从下一个现有队列中接收新的任务。

例如我有队列:

q.1: task11, task12, task13
q.2: task21, task22, task23

还有三个工人。我期待下一个执行顺序:

worker1: task11
worker2: task21
worker3: task12
worker1: task22
worker2: task13
worker3: task23

我尝试使用topic 并订阅了掩码q.*,但这导致每个工作人员都从所有队列中接收任务。什么是正确的决定?

【问题讨论】:

  • 您能否再解释一下为什么需要这种特殊设置?如果您只需要使用队列中的一条消息,则可以使用 basic.qos(prefetch_count=1) 或 basic.get

标签: queue rabbitmq


【解决方案1】:

将每个队列视为自己的工作桶。 q.1 与 q.2 根本没有关系,实际上甚至不知道它的存在。它可能以与 q.2 不同的速率处理事物,并且应该有不同的消费者。 q.1 上的工人应该只关心 q.1,它不应该在 q.1 和 q.2 之间来回反弹。

您是否尝试将 2 个队列链接在一​​起?如果是这样,你可以有这样的东西:

  1. 消息被放入 q.1
  2. 消息由 q.1 的 worker(称为 worker1)处理
  3. worker1 确认消息后,将新消息插入到 q.2 中
  4. 消息由 q.2 的 worker(称为 worker2)处理

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多