Как прочитать значение max-delivery-попытки из Java в MessageListener - PullRequest
0 голосов
/ 03 мая 2019

Я настроил параметры доставки в конфигурации Wildfly 10, как показано ниже.

<address-setting name = "jms.queue.MyQueue" 
redelivery-delay="2000" max-redelivery-delay="10000" max-delivery-attempts="5" 
max-size-bytes="10485760" address-full-policy="FAIL"/>

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

Для этого я хотел бы прочитать JMSXDeliveryCount и решить, является ли это последней попыткой.Если это так, то переместите его в какую-нибудь другую очередь самостоятельно с дополнительной информацией.

Можно ли прочитать исходную настройку, как это сделано в standalone-full.xml, из моей очереди при использовании сообщения?

1 Ответ

1 голос
/ 03 мая 2019

Параметр max-delivery-attempts не определен в спецификации JMS, поэтому для извлечения его с сервера вам необходимо использовать API управления Wildfly.Есть несколько способов сделать это - native или HTTP .Чтобы было ясно, это затруднит портирование вашего приложения на другие потенциальные провайдеры JMS и / или серверы приложений Java.

Чтобы избежать необходимости использовать API управления Wildfly, вы можете установить специальное свойство в сообщении отпроизводитель должен указать, сколько раз он должен быть доставлен.Тогда вы можете просто прочитать это свойство в своем приложении и сравнить его с JMXSDeliveryCount.Если вы не хотите менять приложение-производитель, вы, вероятно, могли бы выполнить то же самое, используя исходящий перехватчик Artemis, чтобы установить свойство сообщения при его доставке потребителю.

...