Есть ли корпоративная очередь сообщений, которая может отбрасывать дубликаты сообщений (первое значение остается)? - PullRequest
6 голосов
/ 17 декабря 2011

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

  • очередь сообщений FIFO
  • , если дублирующееся сообщение ставится в очередь, сама очередь сообщений либо отклоняет, либо отбрасывает его.

Например, производители помещают эти три сообщения (каждое со значением дискриминатора) в очередь в следующей последовательности: M1 (дискриминатор = 7654), M2 (дискриминатор = 2435), M3 (дискриминатор = 7654).Теперь я хочу, чтобы очередь сообщений увидела, что M3 имеет то же значение дискриминатора, что и M1, и, следовательно, отбросила / отклонила M3.Потребители получают только: M1, M2.

Спасибо, Том

1 Ответ

4 голосов
/ 17 декабря 2011

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

  • Асинхронные сообщения должны быть атомарными.Различные поставщики создают свои собственные приспособления для соответствия сообщения (отношения между двумя или более сообщениями), но, как правило, следует избегать соответствия сообщения.В вашем сценарии использования не только требуется, чтобы транспорт имел дело со сходством сообщений, но и делал это в течение неопределенного интервала между связанными сообщениями.
  • Полезная нагрузка сообщения - это большой двоичный объект.Из соображений производительности WMQ не затрагивает полезную нагрузку сообщений, за исключением таких вещей, как сжатие или преобразование кодовой страницы.Все, что требует анализа полезной нагрузки сообщения, является заданием для WebSphere Message Broker, DataPower или WebSphere ESB.Я ожидал бы, что любой транспорт для обмена сообщениями, который утверждает, что является производительным, столкнется с подобными проблемами, потому что анализ полезных нагрузок приводит к более длинным путям кода и нелинейному снижению производительности.Исключением являются свойства сообщений, но WMQ использует их только для выбора, и я ожидаю, что это обычно так.
  • Операция без сохранения состояния.В качестве транспорта состояние приложения может храниться в постоянном сообщении, но состояние транспортного уровня не должно зависеть от состояния приложения в разных единицах работы .Опять же, продукт типа ESB лучше всего подходит, когда вы хотите делегировать управление некоторыми состояниями приложения на уровень обмена сообщениями и особенно когда такое управление охватывает много единиц работы.
  • ГарантированоДоставка.WMQ был разработан, чтобы никогда не терять ваше постоянное сообщение.Если приложение явно устанавливает срок действия, сообщение может исчезнуть , потому что отправитель сказал, что все в порядке, .Если сообщение является непостоянным, оно может исчезнуть, но только в исключительном состоянии и, опять же, , поскольку отправитель сказал, что все в порядке, .Описанный вами сценарий использования может привести к удалению сообщения не потому, что отправитель сказал, что оно в порядке, или даже потому, что получатель сказал, что все в порядке, а из-за взаимодействия с какой-то не связанной третьей стороной, которая случайно отправила вас в очередь сдублирующее значение.Что делать, если это первое сообщение имеет недопустимый заголовок или проблему с кодовой страницей и откатывается?Что если я, как злоумышленник, выбрасываю мусорные сообщения со всеми возможными 4-значными значениями для дискриминатора?

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

...