How to set up messaging subsystem using CLI in Wildfly

Here is an updated CLI command for new Wildfly 10 (ActiveMQ Artemis)

>> ADD MESSAGING SUBSYSTEM

/extension=org.wildfly.extension.messaging-activemq:add()
/subsystem=messaging-activemq:add
/:reload
/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"])

>> Refresh needed at this point

/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")

>> ADD MESSAGE QUEUE

/subsystem=messaging-activemq/server=default/jms-queue=MyQueue:add(entries=[java:/jms/queue/MyQueue])

All commands may be ran as a batch command or separately like this:

$SERVER_CLI_PATH --connect --user=$SERVER_USER --password=$SERVER_PASSW --command="{{line with command}}"

To set up messaging in WildFly 14, I had to do the configuration with separate CLI script files, otherwise jboss-cli would fail with JBTHR00004: Operation was cancelled exceptions, probably due to incomplete reloads. In case you still encounter these errors, add sleep commands in between to the shell script that runs the CLI scripts.

  1. Add the messaging extension, 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 the messaging server allowing only in-VM connectors, 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
    

In case you need HTTP connectors as well, see @petr-hunka's answer.


Here's the script to add messaging. This adds the messaging subsystem, and makes it look like the subsystem when running 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