代码之家  ›  专栏  ›  技术社区  ›  Kekoa

AMQP延迟传递并防止重复消息

  •  4
  • Kekoa  · 技术社区  · 15 年前

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

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

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

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

    1 回复  |  直到 15 年前
        1
  •  2
  •   yawn    15 年前

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

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

    推荐文章