我有一个文件产生的RabbitMQ队列。基本上,每个文件都有type
和state
(新,处理,准备),所以我用像type.state
路由键话题的交流。每当文档更改我发送消息与去年文档描述的交流和它的作品不够好。
然而有时文档可以被处理两次:
report.new
发送到交换。report.new
发送。现在我只是添加少量的代码到工人,从比较与数据库中的一个消息last_modified
文档关键,如果他们是不一样的ACK消息。但是我不认为这是最好的解决办法。
我的想法是ID
添加到邮件头,并且有一定的RabbitMQ插件,它将会从队列中相同ID
删除旧邮件。
谢谢。
附:也许另一个MQ引擎是有用的吗?例如。也许ActiveMQ的有这样的功能?
好吧,我读过有关RabbitMQ的内部结构,并发现它是不可能的。所以周围人的方式寻找它。
ID
在邮件正文ID
值为此ID
最后一名工人跑时间戳。您可以检查此plugin我写它允许删除重复的代理中发布的消息。
您可以根据自己的需要在交易所或在队列中删除重复。只有你的发布商需要做的事情就是设置x-deduplicate-message
邮件头与邮件的ID
。
正如你写,ActiveMQ has "duplicate message detection",但它的工作方式不同。它不会从队列中删除旧邮件,但它并没有将它添加新的消息来代替。所以,它的工作原理一样plugin for RabbitMQ。