我有一个RabbitMQ队列用于生成文档。基本上,每个文档都有type
和state
(新的,处理的,准备好的),所以我使用主题交换和type.state
之类的路由键。每次文档更改时,我都会将包含上一个文档描述的消息发送到交易所,并且它的工作情况非常好。
但有时文件可以处理两次:
report.new
将被发送到交换。report.new
。现在我只需要向工作人员添加小代码,将消息中的last_modified
文档密钥与数据库中的文档密钥进行比较,如果消息不相同,则将消息添加到消息中。但是我不认为这是最好的解决方案。
我的想法是将ID
添加到邮件标头并添加一些RabbitMQ插件,该插件将从队列中删除具有相同ID
的旧邮件。
感谢。
P.S。也许另一个MQ引擎在这里有用吗?例如。也许ActiveMQ有这样的功能?
答案 0 :(得分:5)
好的,我读过有关RabbitMQ内部架构的内容并发现它是不可能的。所以找人的方式就好了。
ID
ID
值是此ID
的最后一个工作人员的时间戳。答案 1 :(得分:2)
您可以查看我写的plugin,它允许对代理中发布的消息进行重复删除。
您可以根据需要在交易所或队列中删除重复数据。您的发布商唯一需要做的就是使用您的邮件的x-deduplicate-message
设置ID
邮件标题。
答案 2 :(得分:1)
如您所写,ActiveMQ has "duplicate message detection",但其工作方式有所不同。它不会从队列中删除旧消息,但不会向其中添加新消息。因此它的作用与plugin for RabbitMQ相同。