我在传输层使用MassTransit
RabbitMQ
,并且面临重复消息重复的需求。
如果重复的消息已经排队(即使该消息由消费者处理),也应该跳过向队列添加新的按摩。例如,可以通过消息内容来识别重复项。
发送DoWork1, DoWork2, DoWork3
可以并行处理,但发送DoWork1, DoWork2, DoWork2
- 应该跳过重复,并且只要处理DoWork1, DoWork2
相同的消息就可以排队,不应该被视为重复
解决方案1:在交换层使用“RabbitMQ Message Deduplication Plugin”,对我来说很理想,但不确定是否能解决所描述的问题。
解决方案2:使用第三方数据存储实现自定义中间件。
对于描述的问题,有没有更好的解决方案?
提前感谢您的帮助!
答案 0 :(得分:3)
RabbitMQ deduplication plugin是为此目的而设计的。
您可以在交易所或队列中进行重复数据删除。主要区别在于,如果以前查看过,则交换对消息进行重复数据删除,而如果队列已经包含它的副本,则队列对消息进行重复数据删除。
发布消息时,只需为x-deduplication-header
标头设置一个唯一标识消息的字符串即可(例如,其正文的MD5哈希)。
使用自定义中间件将使您有更多的操作自由,而以自己的开发为代价。