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) {
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:
Once it was added, messages were received in all nodes of the cluster.