MassTransit 与 RabbitMQ:消息去重

MassTransit with RabbitMQ: messages deduplication

我在传输层使用 MassTransitRabbitMQ,并面临消息重复数据删除的需要。

如果重复的消息已经在队列中(即使该消息正在由消费者处理),则应跳过向队列添加新消息。例如,可以通过邮件内容识别重复项。

发送 DoWork1, DoWork2, DoWork3 可以并行处理,但是发送 DoWork1, DoWork2, DoWork2 - 重复应该被跳过,并且至于 DoWork1, DoWork2 处理相同的消息可以排队,不应该被认为作为重复项。

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

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

描述的问题有更好的解决方案吗?

提前感谢您的帮助!

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

您可以在交易所 de-duplicate 或 queue。主要区别在于交换 de-duplicates 一条消息,如果它之前已经看到它,而 queue de-duplicates 它如果已经包含它的副本。

发布消息时,只需将 x-deduplication-header header 设置为唯一标识消息的字符串(例如其 body 的 MD5 哈希值)。

使用自定义中间件可以让您以牺牲自己的开发为代价获得更多行动自由。