0

我们正在检查 RabbitMQ 的一些工作流用例。

到目前为止,我们使用 ruby​​ 创建了一个测试环境,它符合我们的需求并且看起来运行良好。

如果是 Rabbit 新手,我的问题是关于最佳/良好实践。

让我们定义 3 个队列(仅用于示例)

  1. Q_DECISION
  2. Q_RIGHT
  3. Q_LEFT

每个生产者都会在 Q_DECISION 中发布消息

有一个工作人员在该队列上运行,它检查身体的一些内容。在决定的情况下,消息/任务必须移动到 Q_LEFT 或 Q_RIGHT。

我们正在存储特定于消息的信息 properties.headers,因此我们重复它们以及正文。

到目前为止没问题,现在的问题是关于重新发布:

q_decision.subscribe(:block => true) do |delivery_info, properties, body|

  # ... more code here

  if (decision_left)

    q_left.publish(body, :headers => properties.headers, :persistent => true)

  end

end

如果我们像上面那样重新发布,我们是否会从上一条消息中丢失一些东西?

也有很多属性定义/存储在delivery_info其中properties

我们必须重新发布它们还是只发布自己创建的标题和正文?

4

1 回答 1

1

消息体和消息头是两个不同的东西。我会假设 bunny 或任何客户端库将使用您传递的正文创建一条新消息。这意味着您还需要重新设置要传递到下一个队列的标头。

于 2014-06-17T18:40:22.923 回答