2015-01-19 1 views

ответ

2

Большое спасибо другим, я получил форму в форме ответа и вставлял ее здесь, чтобы она была полезной для других.

Обстоятельство, при которых сообщение может быть повторно доставлено потребителю в зависимости от режима БЛАГОДАРНОСТИ сеанса:

  • Номера для транзакционных сеансов, выбрать режим подтверждения AUTO_ACKNOWLEDGE или DUPS_OK_ACKNOWLEDGE есть сообщения повторно доставлено потребитель, когда приложение Метод onMessage() генерирует исключение. Время выполнения клиента вызывает исключение, а затем снова вызывает функциюMessage(). Исключения улавливаются и сообщаются в ExceptionListener Connection. Установка предела для попыток повторной доставки ограничивает счет повторной доставки. См. Примечание ниже.

  • Непринятые сеансы, которые выбирают режим подтверждения SINGLE_MESSAGE_ACKNOWLEDGE или CLIENT_ACKNOWLEDGE, сообщения переадресовываются, когда приложение вызывает Session.recover().

  • С режимом подтверждения TRANSACTED сообщения переадресовываются, когда приложение откатывает транзакцию.

Приложение может попасть в петлю, где он неоднократно получает сообщение, которое вызывает приложение к сбою, а затем то же самое сообщение повторно доставлена ​​снова и снова. Неограниченный цикл повторной доставки иногда называют сценарием «ядовитых сообщений».

  • точка-точка (очередь) на основе клиентов-потребителей, которые хотят, чтобы ограничить попытки Redelivery может ограничить количество поставок сообщения потребителя, указав параметр на ConnectionFactory. , Это делается с помощью progress.message.jclient.ConnectionFactory.setMaxDeliveryCount (значение java.lang.Integer). Значение 0 (по умолчанию) не указывает предела.

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

Если свойство сообщения JMS_SonicMQ_preserveUndelivered установлено значением истинно, то сообщение будет помещено в очереди SonicMQ.DeadMessage (или альтернативное назначение, указанное в свойстве JMS_SonicMQ_destinationUndelivered), а JMS_SonicMQ_undeliveredReasonCode сообщения свойства будет установлено в прогресс кода ошибки .message.jclient.Constants.UNDELIVERED_DELIVERY_LIMIT_EXCEEDED. Если свойство 'preserveUndelivered' не установлено, сообщение будет отброшено.

  • Кроме того, приложения JMS (например, Pub-Sub клиентов тематических и Sonic ESB Services/процессы) могут выполнять обнаружение самостоятельно, получая и действует на значении свойства JMSXDeliveryCount на каждом сообщении. Свойство JMSXDeliveryCount использует int для указания количества попыток доставки для сообщения. Получает его значение с помощью метода javax.jms.Message.getIntProperty ("JMSXDeliveryCount"). Значение этого свойства увеличивается каждый раз, когда сообщение предоставляется потребителю. Счетчики доставки поддерживаются в среде выполнения клиента для сообщений, ожидающих доставки к потребительскому объекту. Если потребитель закрыт/завершен и перезаписан/перезапущен, счетчик для каждого сообщения, отправленного потребителю, сбрасывается на 0.
4

JMSXDeliveryCount увеличивается каждый раз, когда сообщение повторно отправляется потребителю. Сообщение можно было бы добавить:

1) Пользователь, использующий режим подтверждения клиента, получил сообщение ранее, не вызвал подтверждение этого сообщения().

2) Потребитель получил сообщение в транзакции, не вызвал фиксацию или не вызвал откат.

EDIT:

Если Клиент JMS не может обработать сообщение из-за некоторые плохие заголовки JMS, то такое сообщение (известное как яд сообщения) не будет доставлен к применению и JMS клиенту будет внутренне откат это сообщение. В этом случае также увеличивается JMSXDeliveryCount.

В IBM MQ заданы ли параметры очереди возврата и возврата для очереди, из которой извлекаются сообщения? JMS Client будет помещать такие плохие сообщения в очередь резервного копирования, как только будет достигнут порог возврата. Это делается для того, чтобы избежать повторного получения сообщения JMS клиентом снова и снова, тем самым блокируя доставку других хороших сообщений в приложение.

+0

Можете ли вы помочь мне в дальнейшем в этом случае в случае плохого сообщения, или это единственные сценарии, в которых это может произойти, так как ситуация, с которой я столкнулся, заключается в том, что ее получение увеличивается, и я не могу проследить причину этого, поскольку транзакция прошла успешно. Будет здорово, если вы сможете помочь мне в дальнейшем ... :) – AjayLohani

Смежные вопросы