Hi, I'm having some trouble with client load balancing on my artemis cluster. The cluster is composed by 2 node with the following configuration:
<raw><?xml version='1.0'?> <configuration xmlns="urn:activemq" xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:activemq /schema/artemis-configuration.xsd"> <core xmlns="urn:activemq:core" xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:activemq:core "> <name>${HOSTNAME}</name> <persistence-enabled>true</persistence-enabled> <journal-type>NIO</journal-type> <paging-directory>/var/cache/artemis/paging</paging-directory> <bindings-directory>/var/cache/artemis/bindings</bindings-directory> <journal-directory>/var/cache/artemis/journal</journal-directory> <large-messages-directory>/var/cache/artemis /large-messages</large-messages-directory> <journal-datasync>true</journal-datasync> <journal-min-files>2</journal-min-files> <journal-pool-files>10</journal-pool-files> <journal-file-size>10M</journal-file-size> <journal-buffer-timeout>724000</journal-buffer-timeout> <journal-max-io>1</journal-max-io> <connectors> <connector name="artemis -connector-1">tcp://${HOSTNAME}:61617?sslEnabled=true&trustStorePath=${ARTEMIS_INSTANCE}/etc/truststore.jks</connector> </connectors> <disk-scan-period>5000</disk-scan-period> <max-disk-usage>95</max-disk-usage> <critical-analyzer>true</critical-analyzer> <critical-analyzer-timeout>120000</critical-analyzer-timeout> <critical-analyzer-check-period>60000</critical-analyzer-check-period> <critical-analyzer-policy>HALT</critical-analyzer-policy> <acceptors> <acceptor name="artemis -acceptor-1">tcp://${HOSTNAME}:61617?sslEnabled=true;keyStorePath=${ARTEMIS_INSTANCE}/etc/keystore.jks;keyStorePassword=changeit;trustStorePassword=${ARTEMIS_INSTANCE}/etc/truststore.jks;enabledProtocols=TLSv1.2;enableCipherSuites=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_GCM_SHA256;tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576;protocols=CORE;useEpoll=true;amqpCredits=1000;amqpLowCredits=300</acceptor> </acceptors> <cluster-user>[...]</cluster-user> <cluster-password>[...]</cluster-password> <broadcast-groups> <broadcast-group name="artemis-broadcast-group-1"> <group-address>231.0.0.1</group-address> <group-port>9876</group-port> <connector-ref>artemis-connector-1</connector-ref> </broadcast-group> </broadcast-groups> <discovery-groups> <discovery-group name="artemis-discovery-group-1"> <group-address>231.0.0.1</group-address> <group-port>9876</group-port> </discovery-group> </discovery-groups> <cluster-connections> <cluster-connection name="artemis-cluster-1"> <connector-ref>artemis-connector-1</connector-ref> <message-load-balancing>ON_DEMAND</message-load-balancing> <discovery-group-ref discovery-group-name="artemis -discovery-group-1"/> </cluster-connection> </cluster-connections> <security-settings> <security-setting match="#"> <permission type="createNonDurableQueue" roles="amq"/> <permission type="deleteNonDurableQueue" roles="amq"/> <permission type="createDurableQueue" roles="amq"/> <permission type="deleteDurableQueue" roles="amq"/> <permission type="createAddress" roles="amq"/> <permission type="deleteAddress" roles="amq"/> <permission type="consume" roles="amq"/> <permission type="browse" roles="amq"/> <permission type="send" roles="amq"/> <permission type="manage" roles="amq"/> </security-setting> </security-settings> <address-settings> <address-setting match="activemq.management#"> <dead-letter-address>DLQ</dead-letter-address> <expiry-address>ExpiryQueue</expiry-address> <redelivery-delay>0</redelivery-delay> <max-size-bytes>-1</max-size-bytes> <message-counter-history-day-limit>10</message-counter-history-day-limit> <address-full-policy>PAGE</address-full-policy> <auto-create-queues>true</auto-create-queues> <auto-create-addresses>true</auto-create-addresses> <auto-create-jms-queues>true</auto-create-jms-queues> <auto-create-jms-topics>true</auto-create-jms-topics> </address-setting> <address-setting match="#"> <dead-letter-address>DLQ</dead-letter-address> <expiry-address>ExpiryQueue</expiry-address> <redelivery-delay>0</redelivery-delay> <max-size-bytes>-1</max-size-bytes> <message-counter-history-day-limit>10</message-counter-history-day-limit> <address-full-policy>PAGE</address-full-policy> <auto-create-queues>true</auto-create-queues> <auto-create-addresses>true</auto-create-addresses> <auto-create-jms-queues>true</auto-create-jms-queues> <auto-create-jms-topics>true</auto-create-jms-topics> <redistribution-delay>0</redistribution-delay> </address-setting> </address-settings> <addresses> </addresses> <broker-plugins> <broker-plugin class-name="org.apache.activemq. artemis.core.server.plugin.impl.NotificationActiveMQServerPlugin"> <property key="SEND_EXPIRED_NOTIFICATIONS" value="true" /> </broker-plugin> </broker-plugins> </core> </configuration></raw> <p> Looking at the documentation of Artemis, section Clusters, paragraph<a href="https://activemq.apache.org/components/artemis /documentation/latest/clusters.html#client-side-load-balancing"> Client-Side Load balancing</a>, I've found this: </p> <i>With Apache ActiveMQ Artemis client-side load balancing, subsequent sessions created using a single session factory can be connected to different nodes of the cluster. This allows sessions to spread smoothly across the nodes of a cluster and not be "clumped" on any particular node.</i> <p> But once I created a <b>ClientSessionFactory</b>, each <b>ClientSession </b>generated by it is always attached to same node of the cluster, even if the load balancing strategy is RoundRobinConnectionLoadBalancingPolicy (I've tried also RandomConnectionLoadBalancingPolicy or leave default, that should be RoundRobinConnectionLoadBalancingPolicy ). </p> <p> Looking at the code, I noticed that the ClientSessionFactory use indeed always the same RemoteConnection when generates a new ClientSession, so I don't understand how to balance the load using the same factory. </p> Am I missing something? Thanks in advance