RabbitMQ - 避免发布者端的重复消息

RabbitMQ - Avoiding duplicate messages at publisher side

我正在使用 RabbitMQ 向用户发送通知。用户可以随时阅读他的队列。

我面临的问题是队列在夜间充满了很多通知,而当用户在早上returns 时,他必须按顺序处理这些消息。许多这些通知甚至是重复的。

我想在出版商方面改进这一点是有意义的。也就是说,在添加新通知之前,我们会调查队列中是否已经有待处理的通知。如果是这种情况,我们只会在确实是新通知时才将新通知排队,从而避免重复。

我们甚至可以更进一步,通过组合通知来扩展这一点:不是简单地将新通知排队,我们可以用一个新通知替换队列中的现有通知,该新通知包含这些通知和新通知的总和(例如在一系列内部通知中)。

AMQP/RabbitMQ 可以吗?

不,默认情况下您无法替换现有消息。

本文rabbitmq plugin旨在解决您的问题。

您可以通过将 x-message-deduplication 参数设置为 true 在 queue 上启用 de-duplication。

然后,您的发布商需要为 x-deduplication-header 消息 header 提供对 de-duplication 有意义的值。例如,该值可以是 ID 或 body 的 MD5/SHA1 散列。