Каков наилучший способ отклонить сообщения с одинаковым телом в очереди AMQ? - PullRequest
0 голосов
/ 19 марта 2010

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

В настоящее время я использую обходной путь. Сообщения из очереди потребляются некоторым процессором, который пытается вставить тела в простую таблицу БД с ограничением UNIQUE, примененным к полю message_body. Если процессор вставляет сообщения успешно - он назначается для exchange.out.body и отправляется в другую очередь. Если выдается ConstraintViolationException - ничто не отправляется в другую очередь.

Хотелось бы знать, поддерживает ли AMQ нечто подобное из коробки?

1 Ответ

1 голос
/ 28 марта 2010

Я считаю, что вы можете написать перехватчик для activemq, где вы можете выполнять определенные действия с сообщениями. Проверить: http://activemq.apache.org/interceptors.html

При этом, по моему личному мнению, это плохая практика. ActiveMQ - это система обмена сообщениями, которая должна отвечать только за передачу сообщения. Вся логика может быть лучше выполнена с использованием вашего приложения (либо убедитесь, что отправитель не может отправить одно и то же сообщение более одного раза ИЛИ, создайте промежуточного потребителя, который действительно сопоставляет полученное тело с базой данных, в которой ДО уже видны тела сообщения, направляя сообщение на фактическая очередь получателя)

...