Проверка клиентских исключений в сообщениях DLQ - PullRequest
0 голосов
/ 21 ноября 2011

Сейчас я работаю с очередью JMS, в которой действует политика повторной доставки, так что сообщения, которые откатываются более пяти раз, отправляются в очередь недоставленных сообщений.

Когда сообщение отправляется в очередь недоставленных сообщений в ActiveMQ, есть ли способ узнать, какое исключение вызвало откат этого сообщения? Можно ли установить свойство сообщения, чтобы указать причину сбоя сообщения?

Ответы [ 2 ]

4 голосов
/ 21 ноября 2011

Если вы используете функциональность канала мертвых букв http://activemq.apache.org/message-redelivery-and-dlq-handling.html брокера AMQ, то это, как и было сказано выше, буквально просто сообщение, которое не может быть доставлено.Брокер не знает, что пошло не так, он просто получает сигнал «отката» в сообщении.

Если вы используете функциональность канала мертвых букв Camel http://camel.apache.org/dead-letter-channel.html, то Camel сохраняет вызванное исключение каксвойство в Exchange, которое можно добавить в сообщение об ошибке и отправить его в очередь недоставленных сообщений в брокере AMQ.Таким образом, вместо того, чтобы позволить AMQ откатить сообщение, вы обрабатываете исключение и отправляете сообщение в другую очередь, которая оказывается в очереди недоставленных сообщений.Затем вы можете обогатить сообщение, взяв сообщение трассировки стека и / или исключение из свойства Exchange и сохранив его где-нибудь в сообщении, в заголовке и т. Д.

Camel сохраняет перехваченное исключение как свойство на Exchange с помощьюключ: Exchange.EXCEPTION_CAUGHT

0 голосов
/ 21 ноября 2011

Вам нужно будет посмотреть в журналах поле, генерирующее исключение. То, что отправлено в DLQ, буквально является сообщением, которое не может быть доставлено.

...