2017-02-11 12 views
1

Я использую RabbitMQ для отправки уведомлений пользователю. Пользователь может прочитать свою очередь в любое время.RabbitMQ - Избегание дубликатов сообщений со стороны издателя

Проблема, с которой я сталкиваюсь, заключается в том, что в течение ночи заполняется множество уведомлений, а когда пользователь возвращается утром, он должен обрабатывать эти сообщения последовательно. Многие из этих уведомлений являются даже дублирующими.

Я предполагаю, что было бы целесообразно улучшить это со стороны издателя. То есть перед добавлением нового уведомления мы исследуем, есть ли ожидающие уведомления в очереди. Если это так, мы отправляем в очередь только новое уведомление, если это действительно новое уведомление, поэтому избегаем дублирования.

Мы можем пойти дальше и расширить его, объединив уведомления: вместо простого очередности нового уведомления мы могли бы заменить существующие уведомления из очереди на новую, которая содержит сумму этих уведомлений и новую (для пример в массиве внутренних уведомлений).

Возможно ли это с AMQP/RabbitMQ?

ответ

3

Нет, по умолчанию вы не можете заменить существующее сообщение.

+0

Благодарим за отзыв. Но что мы можем сделать, чтобы решить/улучшить мой сценарий? В основном, я пытаюсь решить сценарий, в котором очереди «перегружены», потому что потребитель не читал какое-то время (что, например, происходит ночью, когда потребитель отключен). Я хочу избежать того, что потребитель должен обрабатывать каждое сообщение, не зная, что эти сообщения являются дубликатами сообщений в очереди. –

+0

вы можете использовать расширение 'TTL' и удалить сообщения старше X секунд https://www.rabbitmq.com/ttl.html Дублирование сообщений со стороны приложения! если вы хотите их избежать, вам нужно трассировать сообщения, которые вы отправляете. – Gabriele