AMQP задерживает доставку и предотвращает дублирование сообщений - PullRequest
4 голосов
/ 16 июля 2009

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

Я использую AMQP (RabbitMQ), есть ли способ сделать это в rabbitmq или протоколе AMQP? Могу ли я проверить содержимое очереди, чтобы убедиться, что я не вставил дубликат? Кажется, что проверка очереди - плохая идея, а не то, что следует делать для системы обмена сообщениями.

Без проверки очереди это можно сделать с помощью этих инструментов? Единственное решение, которое приходит на ум, - это иметь вторую очередь, которая принимает все сообщения, затем потребитель читает каждое сообщение и помещает его во внутреннюю очередь, ждет в течение 5 минут, и все полученные повторяющиеся сообщения отбрасываются. После задержки одно сообщение помещается в «реальную» очередь для обработки.

Кажется, что это может быть обычной ситуацией, которую может обработать система очередей. Есть идеи?

1 Ответ

2 голосов
/ 15 августа 2009

Обработка состояния сообщения - это не то, с чем имеет дело AMQP. Вы можете попытаться обработать состояние в некотором процессе, который также присутствует в сообщениях AMQ и прокси (как вы написали в своем первоначальном вопросе). В зависимости от вашей ситуации вы можете использовать последовательности или более сложные средства обнаружения дубликатов без сохранения состояния, но AMQP не обрабатывает этот конкретный случай использования.

Единственное, что гарантировано, это то, что если несколько привязок соответствуют сообщению, которое впоследствии доставляется в очередь, фактически доставляется только одно сообщение.

...