Wildfly JMS Topic using Message Driven Beans. Get one MDB per server

307 views Asked by At

I'm working with Wildfly 25.0.1.preview, and am trying to use JMS to send a message across the cluster to every node.

So far, I'm using a topic and I have everything working, but only one MDB is generated by message. The MDB is received randomly in one server or another, so I think the cluster configuration is not a problem.

I guess it's the standard behaviour in this case. However, is there any way to achieve what I'm trying to do? Using an alternative to JMS could also be considered.

My messaging-activemq section of standalone-full-ha.xml (I also appreciate any mistakes you might see here):

    <subsystem xmlns="urn:jboss:domain:messaging-activemq:13.0">
        <server name="default" persistence-enabled="false">
            <security elytron-domain="ApplicationDomain"/>
            <journal file-size="1024"/>
            <replication-master cluster-name="messaging-cluster" group-name="activemq-group"/>
            <security-setting name="#">
                <role name="guest" send="true" consume="true" create-non-durable-queue="true" delete-non-durable-queue="true" 
                    create-durable-queue="true" delete-durable-queue="true"/>
            </security-setting>
            <address-setting name="#" dead-letter-address="jms.queue.DLQ" expiry-address="jms.queue.ExpiryQueue" max-size-bytes="10485760" page-size-bytes="2097152" message-counter-history-day-limit="10"/>
            <http-connector name="http-connector" socket-binding="http" endpoint="http-acceptor"/>
            <http-connector name="http-connector-throughput" socket-binding="http" endpoint="http-acceptor-throughput">
                <param name="batch-delay" value="50"/>
            </http-connector>
            <in-vm-connector name="in-vm" server-id="0"/>
            <http-acceptor name="http-acceptor" http-listener="default"/>
            <http-acceptor name="http-acceptor-throughput" http-listener="default">
                <param name="batch-delay" value="50"/>
                <param name="direct-deliver" value="false"/>
            </http-acceptor>
            <in-vm-acceptor name="in-vm" server-id="0"/>
            <jgroups-broadcast-group name="bg-group1" jgroups-cluster="activemq-cluster" connectors="http-connector"/>
            <jgroups-discovery-group name="dg-group1" jgroups-cluster="activemq-cluster"/>
            <cluster-connection name="messaging-cluster" address="jms" connector-name="http-connector" discovery-group="dg-group1"/>
            <jms-queue name="ExpiryQueue" entries="java:/jms/queue/ExpiryQueue"/>
            <jms-queue name="DLQ" entries="java:/jms/queue/DLQ"/>
            <jms-topic name="sfereTopic" entries="jms/topic/sfere java:jboss/exported/jms/topic/sfere"/>
            <connection-factory name="InVmConnectionFactory" entries="java:/ConnectionFactory" connectors="in-vm"/>
            <connection-factory name="RemoteConnectionFactory" entries="java:jboss/exported/jms/RemoteConnectionFactory" connectors="http-connector" ha="true" block-on-acknowledge="true" reconnect-attempts="-1"/>
            <pooled-connection-factory name="activemq-ra" entries="java:/JmsXA java:jboss/DefaultJMSConnectionFactory" connectors="in-vm" transaction="xa"/>
        </server>
    </subsystem>

My MDB:

@MessageDriven(activationConfig = {
    @ActivationConfigProperty(propertyName = "destination", propertyValue = "jms/topic/sfere"),
    @ActivationConfigProperty(propertyName = "destinationType", propertyValue = "jakarta.jms.Topic") })
public class SfereMessageDrivenBean implements MessageListener {

@Override
public void onMessage(Message message) {
1

There are 1 answers

0
Faliorn On

Thanks to this question:

Message driven bean does not receive message from other nodes in the cluster

I was able to figure out what happened. There was a missing "cluster" tag:

    <subsystem xmlns="urn:jboss:domain:messaging-activemq:13.0">
        <server name="default" persistence-enabled="false">
            <cluster password="Anything" />

Once it was added, messages were received in all nodes of the cluster.