Как настроить ActiveMQ Artemis с Payara (Micro) - PullRequest
1 голос
/ 26 марта 2020

Я хотел бы создать настройку для оценки обмена сообщениями с 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. Это было неприятно, так как я уже прожег эти дни. Так что любая помощь с этим приветствуется.

1 Ответ

0 голосов
/ 06 апреля 2020

Отвечая на мой вопрос сейчас. Такое ощущение, что мне понадобились целые годы, чтобы понять это, но я наконец-то заработал. Итак, правильная конфигурация с asadmin выглядит следующим образом:

deploy --type rar /home/tools/artemis-rar-2.11.0.rar

create-resource-adapter-config  --property ConnectorClassName='org.apache.activemq.artemis.core.remoting.impl.netty.NettyConnectorFactory':ConnectionParameters='host=localhost;port=61616':UserName='admin':Password='admin' artemis-rar-2.11.0

create-connector-connection-pool --raname artemis-rar-2.11.0 --connectiondefinition org.apache.activemq.artemis.ra.ActiveMQRAConnectionFactory --ping true jms/ConnectionFactoryPool

create-connector-resource --poolname jms/ConnectionFactoryPool jms/myConnectionFactory

Как видите, для объекта admin конфигурация отсутствует. Причина в том, что artemis rar, по-видимому, не предоставляет никаких административных объектов. Таким образом, вы не можете искать свои пункты назначения (очереди и темы) через jndi, но вам нужно создать их с помощью JMS-сессии, используя физическое имя пункта назначения. Теперь, конфигурация MDB:

@MessageDriven(activationConfig = {
    @ActivationConfigProperty(propertyName = "destination", propertyValue = "Q1"),
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "javax.jms.Queue"),
    @ActivationConfigProperty(propertyName = "acknowledgeMode", propertyValue = "Auto-acknowledge"),
    @ActivationConfigProperty(propertyName = "resourceAdapter", propertyValue = "artemis-rar-2.11.0")
})
public class MyMDB implements MessageListener {
    ...
}

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

Сказав все это, я хотел бы поделиться некоторыми конструктивными критиками для случая, когда разработчики Артемиды спотыкаются об этом. Хотя в документации объясняется, что для Java пользователей EE существует архитектура JCA для artemis, нигде не объясняется, как ее настроить / настроить. На maven даже нет ссылки на rar-файл (кстати, у него странный идентификатор goup-id). Конечно, есть много примеров с Артемидой, но из того, что я вижу, нет ни одного, показывающего, как настроить rar. Вместо этого они настроены с использованием client-jar, но я сомневаюсь, что этот подход будет работать с MDB. Начнем с того, что в rar-примере были показаны свойства конфигурации, но не их значения (по крайней мере, не для свойства ConnectorClassName). Тогда можно только взглянуть на источники на github и попытаться преобразовать конфигурацию, которую другие пользователи использовали для других серверов приложений. Дайте мне знать, если у меня что-то не так с моим подходом, но с помощью classi c ActiveMQ.

все было гораздо проще настроить.
...