【问题标题】:AMQP Delay Delivery and Prevent Duplicate MessagesAMQP 延迟传递和防止重复消息
【发布时间】:2010-11-11 12:11:15
【问题描述】:

我有一个系统会偶尔生成消息,我希望每 5 分钟只提交 0 条消息或 1 条消息。如果没有生成消息,则队列使用者不会处理任何内容。如果在 5 分钟内生成了 100 条相同的消息,我只希望从队列中消耗其中的一条。

我正在使用 AMQP(RabbitMQ),有没有办法在 rabbitmq 或 AMQP 协议中实现这一点?我可以检查队列的内容以确保不插入重复项吗?队列检查似乎不是一个好主意,通常不应该为消息传递系统做些什么。

如果没有队列检查,这可以用这些工具来完成吗?想到的唯一解决方案是使用第二个队列接收所有消息,然后消费者读取每条消息并将其放入内部队列中,等待 5 分钟,然后丢弃收到的任何重复消息。延迟后,单条消息被放到“真正的”队列中进行处理。

这似乎是一种常见的情况,队列系统可以处理。有什么想法吗?

【问题讨论】:

    标签: process message-queue delay amqp duplicate-removal


    【解决方案1】:

    处理消息状态不是 AMQP 正在处理的事情。您可以尝试在 AMQ 和代理消息中也存在的某个进程中处理状态(就像您在原始问题中所写的那样)。根据您的情况,您可能可以使用序列或更复杂的无状态重复检测方法,但 AMQP 不处理此特定用例。

    唯一可以保证的是,如果多个绑定与随后传递到队列的消息匹配,则实际上只有一条消息被传递。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-03-27
      • 2022-12-14
      • 1970-01-01
      • 2019-07-18
      • 1970-01-01
      • 2014-09-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多