Rabbitmq:如何与多个消费者保持兔子的性质?

时间:2017-05-03 11:15:02

标签: rabbitmq rabbitmq-exchange

我们有多个消费者来处理库存的创建/更新/删除请求。

所有这些请求都在rabbitmq中处理。问题是有时候当创建股票并立即删除时,"删除"消息首先被处理,"创建"消息以后。

虽然我们推动"创造"之前的消息"删除"。这是因为我们有多个消费者在不同的服务器上运行。

我的问题是,运行多个消费者本身违反了队列的FIFO原则。如何避免这种情况?

1 个答案:

答案 0 :(得分:1)

在提案之前的假设,您的股票的可能事件顺序是:

  1. 创建
  2. 更新(可选,可以是多个)
  3. 删除
  4. 由于message priority在您所描述的极端情况下无法提供帮助,

    我相信你最好的选择是delayed messages,无论是链接中引用的插件,还是通过消息TTL和备用交换配置。

    建议您按照以下方式配置:

    • 删除延迟200毫秒的邮件
    • 以100毫秒延迟更新消息
    • 毫不拖延地创建消息

    并为消费者配置不允许预取

    提议的时间必须根据每种类型事件的实际处理时间进行调整。

    但很明显,该提案肯定违反了FIFO原则。

    如果您真的想要维护FIFO,请不要认为除了单个消费者之外您还有其他选择(如果您想要备份流程,请配置独占消费;等待"有机会消费)