Как избавиться от дублирующихся сообщений в очереди RabbitMq?
Добрый день.
Есть два сервиса. Необходимо, чтобы один сервис при изменении какой-то сущности сообщал об этом другому сервису.
Сейчас обмен происходит с помощью сложных велосипедов и хранением очереди в MySql. Планируется делать это с помощью RabbitMQ, но есть некоторые проблемы.
Первый сервис меняет данные довольно часто (может быть десятки раз в минуту), а второй сервис получает эти данные с периодичность в 2 минуты.
Если класть каждое изменение сущности в очередь RabbitMQ, то при обработке очереди вторым сервисом один и тот же элемент будет обрабатываться многократно.
Как можно реализовать уникальность на момент начала обработки очереди?
Читать всю очередь и циклами группировать элементы - затратно и как-то костыльно.
Если читать по одному элементу, обрабатывать, и при чтении следующего проверять, был ли он обработан, и если был, просто помечать прочитанным, могут потеряться данные, когда мы обработали первый элемент, а уже после этого произошло обновление.
Существует ли в RabbitMQ какой-то механизм, решающий эту проблему?
Если есть какие-то другие предложения без написания своих велосипедов, тоже интересно было бы услышать.
Rabbit не позволяет заменять одно сообщение другим или каким-то другим образом произвести редактирование сообщение. Единственный вариант это фильтровать сообщения на уровне consumer