Как настроить подсистему обмена сообщениями с помощью CLI в Wildfly
У кого-нибудь есть пример скрипта для настройки подсистемы обмена сообщениями в Wildfly с помощью CLI?
Прекрасным примером может служить интерфейс командной строки, необходимый для работы сервера, на котором запущен standalone.xml, и после запуска сценария CLI он имеет подсистему обмена сообщениями, как определено в standalone-full.xml.
Все примеры, которые я нашел до сих пор, начинаются с предположения, что подсистема обмена сообщениями уже существует.
2 ответа
Вот скрипт для добавления сообщений. Это добавляет подсистему обмена сообщениями и делает ее похожей на подсистему при запуске standalone-full.xml.
/extension=org.jboss.as.messaging:add()
batch
/subsystem=messaging:add
/subsystem=messaging/hornetq-server=default:add
/subsystem=messaging/hornetq-server=default/:write-attribute(name=journal-file-size, value=102400L)
/subsystem=messaging/hornetq-server=default/address-setting=#:add(address-full-policy="PAGE", \
dead-letter-address="jms.queue.DLQ", expiry-address="jms.queue.ExpiryQueue", expiry-delay=-1L, \
last-value-queue=false, max-delivery-attempts=10, max-size-bytes=10485760L, message-counter-history-day-limit=10, \
page-max-cache-size=5, page-size-bytes=2097152L, redelivery-delay=0L, redistribution-delay=-1L, send-to-dla-on-no-route=false)
/subsystem=messaging/hornetq-server=default/in-vm-connector=in-vm:add(server-id=0)
/subsystem=messaging/hornetq-server=default/in-vm-acceptor=in-vm:add(server-id=0)
/subsystem=messaging/hornetq-server=default/http-connector=http-connector:add(socket-binding="http", param={http-upgrade-endpoint="http-acceptor"})
/subsystem=messaging/hornetq-server=default/http-connector=http-connector-throughput:add(socket-binding="http", param={http-upgrade-endpoint="http-acceptor-throughput", batch-delay=50})
/subsystem=messaging/hornetq-server=default/http-acceptor=http-acceptor:add(http-listener="default")
/subsystem=messaging/hornetq-server=default/http-acceptor=http-acceptor-throughput:add(http-listener="default", param={batch-delay=50, direct-deliver=false})
/subsystem=messaging/hornetq-server=default/connection-factory=InVmConnectionFactory:add(connector={"in-vm"=>undefined}, entries = ["java:/ConnectionFactory"])
/subsystem=messaging/hornetq-server=default/connection-factory=RemoteConnectionFactory:add(connector={"http-connector"=>undefined}, entries = ["java:jboss/exported/jms/RemoteConnectionFactory"])
/subsystem=messaging/hornetq-server=default/pooled-connection-factory=hornetq-ra:add(connector={"in-vm"=>undefined}, entries=["java:/JmsXA","java:jboss/DefaultJMSConnectionFactory"])
/subsystem=messaging/hornetq-server=default/security-setting=#:add()
/subsystem=messaging/hornetq-server=default/security-setting=#/role=guest:add(consume=true, create-durable-queue=false, create-non-durable-queue=true, delete-durable-queue=false, delete-non-durable-queue=true, manage=false, send=true)
jms-queue add --queue-address=ExpiryQueue --durable=true --entries=["java:/jms/queue/ExpiryQueue"]
jms-queue add --queue-address=DLQ --durable=true --entries=["java:/jms/queue/DLQ"]
run-batch
Вот обновленная команда CLI для новой Wildfly 10 (ActiveMQ Artemis)
>> ДОБАВИТЬ СУБСИСТЕМУ СООБЩЕНИЯ
/subsystem=messaging-activemq:add
/subsystem=messaging-activemq/server=default:add
/subsystem=messaging-activemq/server=default/security-setting=#:add
/subsystem=messaging-activemq/server=default/address-setting=#:add(dead-letter-address="jms.queue.DLQ", expiry-address="jms.queue.ExpiryQueue", expiry-delay="-1L", max-delivery-attempts="10", max-size-bytes="10485760", page-size-bytes="2097152", message-counter-history-day-limit="10")
/subsystem=messaging-activemq/server=default/http-connector=http-connector:add(socket-binding="http", endpoint="http-acceptor")
/subsystem=messaging-activemq/server=default/http-connector=http-connector-throughput:add(socket-binding="http", endpoint="http-acceptor-throughput" ,params={batch-delay="50"})
/subsystem=messaging-activemq/server=default/in-vm-connector=in-vm:add(server-id="0")
/subsystem=messaging-activemq/server=default/http-acceptor=http-acceptor:add(http-listener="default")
/subsystem=messaging-activemq/server=default/http-acceptor=http-acceptor-throughput:add(http-listener="default", params={batch-delay="50", direct-deliver="false"})
/subsystem=messaging-activemq/server=default/in-vm-acceptor=in-vm:add(server-id="0")
/subsystem=messaging-activemq/server=default/jms-queue=ExpiryQueue:add(entries=["java:/jms/queue/ExpiryQueue"])
/subsystem=messaging-activemq/server=default/jms-queue=DLQ:add(entries=["java:/jms/queue/DLQ"])
>> Обновление необходимо на этом этапе
/subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:add(connectors=["in-vm"], entries=["java:/ConnectionFactory"])
/subsystem=messaging-activemq/server=default/connection-factory=RemoteConnectionFactory:add(connectors=["http-connector"], entries = ["java:jboss/exported/jms/RemoteConnectionFactory"])
/subsystem=messaging-activemq/server=default/pooled-connection-factory=activemq-ra:add(transaction="xa", connectors=["in-vm"], entries=["java:/JmsXA java:jboss/DefaultJMSConnectionFactory"])
/subsystem=ee/service=default-bindings/:write-attribute(name="jms-connection-factory", value="java:jboss/DefaultJMSConnectionFactory")
/subsystem=ejb3:write-attribute(name="default-resource-adapter-name", value="${ejb.resource-adapter-name:activemq-ra.rar}")
/subsystem=ejb3:write-attribute(name="default-mdb-instance-pool", value="mdb-strict-max-pool")
>> ДОБАВИТЬ СООБЩЕНИЕ ОЧЕРЕДЬ
/subsystem=messaging-activemq/server=default/jms-queue=MyQueue:add(entries=[java:/jms/queue/MyQueue])
Все команды могут быть запущены как пакетная команда или отдельно, например так:
$SERVER_CLI_PATH --connect --user=$SERVER_USER --password=$SERVER_PASSW --command="{{line with command}}"
Чтобы настроить обмен сообщениями в WildFly 14, мне пришлось выполнить настройку с отдельными файлами сценариев CLI, в противном случае jboss-cli
потерпит неудачу с JBTHR00004: Operation was cancelled
исключения, вероятно, из-за неполных перезагрузок. Если вы все еще сталкиваетесь с этими ошибками, добавьте sleep
промежуточные команды для сценария оболочки, который запускает сценарии CLI.
Добавьте расширение обмена сообщениями,
1-add-messaging-extension-and-subsystem.cli
:batch # Add messaging extension /extension=org.wildfly.extension.messaging-activemq:add() # Add messaging subsystem /subsystem=messaging-activemq:add run-batch /:reload
Добавьте сервер обмена сообщениями, разрешающий только соединители в виртуальной машине,
2-add-messaging-server.cli
:batch # Add messaging server with default configuration, allow only in-VM connectors /subsystem=messaging-activemq/server=default:add /subsystem=messaging-activemq/server=default/security-setting=#:add /subsystem=messaging-activemq/server=default/address-setting=#:add( \ dead-letter-address="jms.queue.DLQ", \ expiry-address="jms.queue.ExpiryQueue", \ max-size-bytes="10485760", \ message-counter-history-day-limit="10", \ page-size-bytes="2097152") /subsystem=messaging-activemq/server=default/in-vm-connector=in-vm:add( \ server-id="0",params=buffer-pooling=false) /subsystem=messaging-activemq/server=default/in-vm-acceptor=in-vm:add( \ server-id="0",params=buffer-pooling=false) /subsystem=messaging-activemq/server=default/jms-queue=ExpiryQueue:add( \ entries=["java:/jms/queue/ExpiryQueue"]) /subsystem=messaging-activemq/server=default/jms-queue=DLQ:add( \ entries=["java:/jms/queue/DLQ"]) /subsystem=messaging-activemq/server=default/connection-factory=InVmConnectionFactory:add( \ connectors=["in-vm"], \ entries=["java:/ConnectionFactory"]) /subsystem=messaging-activemq/server=default/pooled-connection-factory=activemq-ra:add( \ transaction="xa", \ connectors=["in-vm"], \ entries=["java:/JmsXA java:jboss/DefaultJMSConnectionFactory"]) # Configure default connection factory in the EE subsystem /subsystem=ee/service=default-bindings/:write-attribute(name="jms-connection-factory", value="java:jboss/DefaultJMSConnectionFactory") # Configure message-driven beans in the EJB subsystem /subsystem=ejb3:write-attribute(name="default-resource-adapter-name", value="${ejb.resource-adapter-name:activemq-ra.rar}") /subsystem=ejb3:write-attribute(name="default-mdb-instance-pool", value="mdb-strict-max-pool") run-batch /:reload
Если вам также нужны HTTP-коннекторы, смотрите ответ @ petr-hunka.