В кластере ActiveMQ, как найти потребителя, который выбрал конкретное сообщение или набор сообщений?

У нас есть набор очередей, и маршруты верблюдов были написаны для приема сообщений из очереди - очереди живут на сервере ActiveMQ, а маршруты верблюдов - в Apache Karaf. Мы создали кластер с несколькими узлами karaf; проблема в том, что эти сообщения читаются по верблюжьим маршрутам в разных узлах; Есть ли способ узнать потребителя, который выбрал конкретное сообщение или набор сообщений? Я погуглил, но ничего не понял, поэтому я прошу вашей помощи.

3 ответа

Решение

Вы можете попробовать использовать комбинацию:

  1. ActiveMQ TraceBrokerPathPlugin: настройте этот плагин в каждом узле кластера. Он добавит 'brokerName' к заголовку JMS в сообщении при прохождении через узлы.
  2. Включить историю сообщений в контексте верблюда. Настройте весь контекст верблюда, чтобы включить историю сообщений. Он будет включать свойство exchange со списком org.apache.camel.MessageHistory с метаданными маршрутизации.
  3. Включите трассировку или внедрите EventNotifier, чтобы записать необходимую информацию в файл журнала.
  4. (Необязательно) Реализуйте идентификатор корреляции, чтобы лучше идентифицировать поток ваших сообщений в ходе разговора / транзакции.

В целях отладки вы можете использовать Hawtio для мониторинга ваших верблюжьих узлов и отслеживания сообщений, используемых маршрутами. Вы также можете добавить запись в ваши маршруты на лету.

В ActiveMQ нет отслеживания потребляемых сообщений, за исключением рекомендательных сообщений. Решение состоит в том, чтобы позволить каждому потребителю Camel объявить, что он каким-то образом обработал сообщение. Есть множество способов сделать это, таких как запись в файл журнала, отправка журналов в базу данных, электронная почта или что-то еще, в зависимости от частоты и потребностей. Конечно, вы можете написать какой-нибудь плагин или похожий на ActiveMQ и сделать так, чтобы он записывал такую ​​информацию для ваших нужд, но это кажется неудобным.

Другие вопросы по тегам