Я хотел бы создать настройку для оценки обмена сообщениями с JMS. Целевой средой была бы обычная Payara, но для простой настройки я бы хотел протестировать ее с Payara Micro (в комплекте с кувшином). Таким образом, я хотел бы создать установку, которая может быть легко перенесена. С поиском JNDI не должно быть проблем с кодом в этом отношении. Кроме того, кодирование не очень сложно. Вещи, которые я хотел бы проверить с помощью этой настройки: - Потребитель, использующий бины, управляемые сообщениями - Производитель - доступ к очереди управления (как я хотел бы проверить, как включить синий / зеленый развертывание)
Использование rar of Classi c ActiveMQ, все было сравнительно легко. Я настроил post-boot-commands.txt для развертывания и настройки адаптера ресурсов со следующим содержимым:
create-resource-adapter-config --property ServerUrl='tcp://localhost:61616':UserName='admin':Password='admin' activemq-rar-5.15.11
create-connector-connection-pool --raname activemq-rar-5.15.11 --connectiondefinition javax.jms.ConnectionFactory --ping true --isconnectvalidatereq true jms/myConnectionPool
create-connector-resource --poolname jms/myConnectionPool jms/myConnectionFactory
create-admin-object --raname activemq-rar-5.15.11 --restype javax.jms.Queue --property PhysicalName=Q1 jms/myQueue
Это позволяет Payara Micro развертывать и настраивать rar перед развертыванием war-файла моих приложений. Затем управляемый сообщениями компонент может быть записан с такой конфигурацией:
@MessageDriven(activationConfig = {
@ActivationConfigProperty(propertyName = "destination", propertyValue = "Q1"),
@ActivationConfigProperty(propertyName = "resourceAdapter", propertyValue = "activemq-rar-5.15.11"),
@ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue")
})
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class MyMDB implements MessageListener {
...
}
Поскольку продюсер был легок, я пропущу эту часть здесь. Все работало хорошо, пока я не начал работать с очередью управления. После примера управления, поставляемого с брокером (который использует некоторый устаревший код :(), я столкнулся с конфликтами, поскольку решение использовало код от клиента artemis, который затем конфликтовал с классами ConnectionFactory из classi c ActiveMQ rar. Как у меня есть Плохое предчувствие, когда я использую ActiveMQ rar classi c с ActiveMQ Artemis, я попытался переключиться на rate artemis. К сожалению, найти информацию о том, как настроить адаптер ресурсов с помощью средства Payara, оказалось адом на земле.
Посмотрев на источники класса ActiveMQResourceAdapter, я выяснил следующую конфигурацию:
deploy --type rar /home/tools/artemis-rar-2.11.0.rar
create-resource-adapter-config --property connectionParameters='host=localhost;port=61616':JndiParams='java.naming.factory.initial=org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory;connectionFactory.ConnectionFactory=tcp://localhost:61616;queue.jms/myQueue=Q1':useJndi='true':entries='ConnectionFactory':userName='admin':password='admin' artemis-rar-2.11.0
create-connector-connection-pool --raname artemis-rar-2.11.0 --connectiondefinition javax.jms.ConnectionFactory --ping true --isconnectvalidatereq true jms/ConnectionFactoryPool
create-connector-resource --poolname jms/myConnectionPool jms/myConnectionFactory
create-admin-object --raname artemis-rar-2.11.0 --restype javax.jms.Queue --property PhysicalName=Q1 jms/myQueue
Свойства JNDI являются попыткой имитировать c содержимое jndi.properties из хорошие примеры: при запуске Payara Micro сообщает:
[2020-03-26T20: 51: 58.812 + 0100] [] [INFO] [] [org. apache .activemq.artemis.ra] [tid: _ThreadID = 48 _ThreadName = pool-18-thread-1] [timeMillis: 1585252318812] [levelValue: 800] AMQ1510 07: Адаптер ресурса запущен
Плохая новость заключается в том, что он затем продолжает:
[2020-03-26T20: 51: 58.843 + 0100] [] [WARNUNG ] [] [fi sh .payara.boot.runtime.BootCommand] [tid: _ThreadID = 1 _ThreadName = main] [timeMillis: 1585252318843] [levelValue: 900] Команда загрузки-подключения-подключения-пула команды загрузки не выполнена PlainTextActionReporterFAILUREInvalid определение соединения , Соединительный модуль с определением соединения javax.jms.ConnectionFactory не найден.
И:
[2020-03-26T20: 51: 58.850 + 0100] [] [WARNUNG] [] [fi sh .payara.boot. runtime.BootCommand] [tid: _ThreadID = 1 _ThreadName = main] [timeMillis: 1585252318850] [levelValue: 900] Команда загрузки-соединителя-ресурса не выполнена. Значение PlainTextActionReporterFAILUREAttribute (pool-name = jms / myConnectionPool) не найдено в списке подключение пулов.
И:
[2020-03-26T20: 51: 58.856 + 0100] [] [WARNUNG] [] [fi sh .payara.boot. runtime.BootCommand] [tid: _ThreadID = 1 _ThreadName = main] [timeMillis: 1585252318856] [levelValue: 900] Команда Boot create-admin-object не выполнена PlainTextActionReporterFAILUREResource Adapter artemis-rar-2.11.0 не содержит какого-либо типа ресурса для admin- объект. Пожалуйста, укажите другой res-адаптер.
Итак, он не может зарегистрировать фабрику соединений и очередь. Как следствие, приложение генерирует исключения позже при поиске ресурсов.
Я должен признать, что у меня нет опыта работы с JMS и адаптерами ресурсов / JCA. Это было неприятно, так как я уже прожег эти дни. Так что любая помощь с этим приветствуется.