【发布时间】:2018-01-14 07:11:50
【问题描述】:
我有一个用于文档生成的 RabbitMQ 队列。基本上,每个文档都有type 和state(新的、处理的、准备好的),所以我使用带有type.state 之类的路由键的主题交换。每次文档更改时,我都会将带有最后文档描述的消息发送到交易所,并且效果很好。
但有时文档可以被处理两次:
- 用户发送新文档。所以新消息
report.new被发送到交换。 - 当工作人员尚未开始文档处理(队列尚未到达)时,用户更新了文档。发送同一文档的新消息
report.new。 - 所以现在工人收到第一条消息并开始工作,而文档已更改,因此这项工作完全没有意义。
现在我只是将小代码添加到工作人员中,将消息中的last_modified 文档键与数据库中的键进行比较,如果它们不同,则确认消息。但是我认为这不是最好的解决方案。
我的想法是将ID 添加到消息头中,并使用一些RabbitMQ 插件从队列中删除具有相同ID 的旧消息。
谢谢。
附:也许另一个 MQ 引擎在这里有用?例如。也许ActiveMQ有这样的功能?
【问题讨论】: