Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set up messaging subsystem using CLI in Wildfly

Does anyone have an example script for setting up the messaging subsystem in Wildfly using CLI?

The perfect example would be the CLI needed to take a server running the standalone.xml, and after running the CLI script it has the messaging subsystem as defined in the standalone-full.xml.

The examples I've found so far all start with the assumption the messaging subsystem is already in place.

like image 491
DJ Spiess Avatar asked Jul 23 '14 21:07

DJ Spiess


People also ask

How do I connect to WildFly command line?

Running the CLI The first thing to do after the CLI has started is to connect to a managed WildFly instance. This is done using the command connect, e.g. or 'help' for the list of supported commands. localhost:9990 is the default host and port combination for the WildFly CLI client.

How use jboss-cli sh?

2.1. For Windows Server, use the EAP_HOME\bin\jboss-cli. bat script to launch the management CLI. See Connect to the Server for details on launching the management CLI and connecting to the server in one step using the --connect argument. The jboss-cli scripts set the com.


2 Answers

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.

like image 175
mrts Avatar answered Oct 06 '22 04:10

mrts


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}}"
like image 29
Petr Hunka Avatar answered Oct 06 '22 04:10

Petr Hunka