2009-07-16 3 views
3

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

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

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

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

ответ

2

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

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

Смежные вопросы