Как получить сообщение после последней попытки в настройке JMS, ActiveMQ и SimpleMessageListenerContainer?

У меня есть установка Spring JMS, ActiveMQ, где я использую SimpleMessageListenerContainer, который я связал с прослушивателем сообщений POJO. Я определил RedeliveryPolicy, где, если в прослушивателе сообщений POJO есть исключения, сообщение отправляется в DLQ после 4 попыток. Я хотел бы получить доступ к сообщению после исчерпания повторных попыток, возможно ли это с помощью SMLC? Как насчет DefaultMessageListenerContainer?


person user3163473    schedule 10.02.2016    source источник


Ответы (1)


Вам нужен другой контейнер, прослушивающий DLQ.

Или вы можете использовать JmsTemplate.receive() в DLQ, чтобы получать их по запросу.

person Gary Russell    schedule 10.02.2016
comment
Нет ли способа получить ссылку на сообщение (возможно, непосредственно перед его отправкой в ​​DLQ) без прослушивания DLQ? Требование - не трогать DLQ. - person user3163473; 10.02.2016
comment
К вашему сведению, идея такова: попытаться отправить сообщение 4 раза, если это не удается, возьмите сообщение после последней попытки и пометьте его как ошибку в базе данных. Оставьте DLQ для наблюдения в исключительных случаях. - person user3163473; 10.02.2016
comment
JMS 2.0 сделал JMSXDeliveryCount обязательным. Некоторые брокеры 1.1 поддерживают его. Таким образом, вы можете использовать счетчик, чтобы определить, сколько попыток было сделано. "JMSXDeliveryCount is not a new property; it was defined in JMS 1.1. However, in JMS 1.1, it was optional for a JMS provider to actually set it, which meant application code that used it was not portable. In JMS 2.0, it becomes mandatory for JMS providers to set this property, allowing portable applications to make use of it." - person Gary Russell; 10.02.2016
comment
JMSXDeliveryCount помог создать решение без прослушивания DLQ. - person user3163473; 15.02.2016