Как лучше всего отклонять сообщения с одинаковым телом в очереди AMQ?

StackOverflow https://stackoverflow.com/questions/2473318

  •  20-09-2019
  •  | 
  •  

Вопрос

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

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

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

Это было полезно?

Решение

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top