Мы переносим приложения с WebSphere Application Server Full profile (WAS) на Open Liberty (OL)
Один из шаблонов, который у нас есть, заключается в использовании очереди в «строгом порядке FIFO» для некоторой очереди JMS. Многие экземпляры приложения выполняются одновременно («члены кластера» в WAS, «модули» в kubernetes/statefulset/docker для OL).
Для реализации FIFO один и только один процесс «JMS-активация»/MDB может потреблять Очередь и, если возникает исключение, остановить прослушиватель (активация JMS)
В WAS мы можем сделать это,
- настройка
"WAS_EndpointInitialState"
на"ACTIVE"
активации JMS для одного сервера и"INACTIVE"
для остальных - set
"Maximum server sessions"
to 1 при активации JMS - проверить
"Stop endpoint if message delivery fails"
- отслеживать журналы, чтобы увидеть, прекратились ли активации
В OL мы можем in"server.xml"
:
- set
"autoStart="true"
on the"jmsActivationSpec"
stanza для одного из процессов и"false"
для остальных - установить
"maxEndpoints="1"
на"jmsActivationSpec"
Но как сделать так, чтобы активация останавливалась, если приложение выдает исключение в методе "onMessage"
" в MDB?
[EDIT 1 After @JoshMc comment]В настоящее время сообщение перемещается в DLQ, и активация, кажется, никогда не останавливается, поэтому FIFO прерывается, поскольку следующее сообщение в очереди потребляется...
В настоящее время, когда метод "onMessage()"
method генерирует исключение, сообщение помещается обратно в очередь и немедленно повторно обрабатывается бесконечно
Параметр in"server.xml"
для подключения к IBM MQ из OL выполняется как описано здесь
[EDIT 2]
Эта функция (остановка активации в случае сбоя) реализована в IBM MQ rar v9.1.1 и WebSphere Liberty 18.0.0.4 путем установки свойства "maxSequentialDeliveryFailures"
в спецификации активации в этом RFE. Он не работает на Open Liberty v19.0.0.2 и IBM MQ rar v9.1.1. rar специально предназначен для WebSphere Liberty, чтобы применить свойство, подтвержденное после активации трассировки на коннекторе:
March 7, 2019 1:17:38 EST PM[Default Executor-thread-7] ResourceAdapterImpl
WMQ messaging : '9.1.1.0-p911-L181120.1'.
MQJCA5003: 'maxSequentialFailureCount' cannot be set outside Websphere Liberty Profile
Таким образом, вопрос все еще существует: как остановить активацию в случае, если метод "onMessage"
" в MDB не может использовать сообщение? Откройте RFE для IBM MQ с просьбой перенести эту функцию в Open Liberty?
maxSequentialDeliveryFailures
. Так что просто схитрите и найдите способ притвориться, что это сервер WLP, это не сработает. - person titou10   schedule 08.03.2019BOTHRESH(1) BOQNAME('')
убедитесь, что у приложения НЕТ доступа для размещения в DLQ, убедитесь, что сообщение сохраняется. Обратите внимание, что сообщение также не может иметь параметр отчетаMQRO_DISCARD_MSG
, но на основании того, что вы описали ранее, он не установлен, иначе оно никогда не попыталось бы перейти к DLQ. На странице IBM KC 'Удаление сообщений из очереди в ASF документирует следующее: - person JoshMc   schedule 08.03.2019BOTHRESH(1)+BOQNAME('')
сообщение идет в сSYSTEM.DEAD.LETTER.QUEUE
. На данный момент мы решили разделить приложение на 2, 1 онлайн и один бесконечный пакет и удалить MDB из онлайн-приложения. - person titou10   schedule 12.03.2019