我们正在检查 RabbitMQ 的一些工作流用例。
到目前为止,我们使用 ruby 创建了一个测试环境,它符合我们的需求并且看起来运行良好。
如果是 Rabbit 新手,我的问题是关于最佳/良好实践。
让我们定义 3 个队列(仅用于示例)
- Q_DECISION
- Q_RIGHT
- 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
。
我们必须重新发布它们还是只发布自己创建的标题和正文?