使用RabbitMQ的MassTransit:消息重复数据删除

时间:2018-05-31 13:43:36

标签: rabbitmq messaging masstransit

我在传输层使用MassTransit RabbitMQ,并且面临重复消息重复的需求。

如果重复的消息已经排队(即使该消息由消费者处理),也应该跳过向队列添加新的按摩。例如,可以通过消息内容来识别重复项。

发送DoWork1, DoWork2, DoWork3可以并行处理,但发送DoWork1, DoWork2, DoWork2 - 应该跳过重复,并且只要处理DoWork1, DoWork2相同的消息就可以排队,不应该被视为重复

解决方案1:在交换层使用“RabbitMQ Message Deduplication Plugin”,对我来说很理想,但不确定是否能解决所描述的问题。

解决方案2:使用第三方数据存储实现自定义中间件。

对于描述的问题,有没有更好的解决方案?

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

RabbitMQ deduplication plugin是为此目的而设计的。

您可以在交易所或队列中进行重复数据删除。主要区别在于,如果以前查看过,则交换对消息进行重复数据删除,而如果队列已经包含它的副本,则队列对消息进行重复数据删除。

发布消息时,只需为x-deduplication-header标头设置一个唯一标识消息的字符串即可(例如,其正文的MD5哈希)。

使用自定义中间件将使您有更多的操作自由,而以自己的开发为代价。