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

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

我正在使用AMQP(RabbitMQ),有没有办法在rabbitmq或AMQP协议中完成此操作? 我可以检查队列的内容以确保我不插入重复的内容吗? 似乎队列检查是一个坏主意,通常不应该为邮件系统做什么。

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

看起来这可能是一个常见的情况,即队列系统可以处理。 有任何想法吗?


处理消息状态并不是AMQP正在处理的事情。 您可以尝试处理AMQ和代理消息中存在的某些进程中的状态(例如您在原始问题中编写的内容)。 根据您的情况,您可能可以使用序列或更复杂的方式进行无状态重复检测,但AMQP不处理此特定用例。

唯一保证的是,如果多个绑定匹配随后传递到队列的消息,则仅实际传递一条消息。

链接地址: http://www.djcxy.com/p/5823.html

上一篇: AMQP Delay Delivery and Prevent Duplicate Messages

下一篇: OpenGL rendering to texture looks jagged