Are you using a shared-store HA configuration on the broker? If so, how did you stop the broker? Based on the error message it looks like you shut the broker down "gracefully" (e.g. using CTRL-C).
Justin On Tue, Oct 28, 2025 at 8:18 PM Illia <[email protected]> wrote: > Hi Justin. > Could you please help me with one more thing? > I am using the library that you mentioned but it seems that my consumer > doesn't automatically reconnect to a backup node on failover. Here is my > connection factory configuration: > > @Bean > public ConnectionFactory artemisConnectionFactory() { > // failover URL with two cluster nodes > String brokerUrl = > "(tcp://artemis-node-a:61616,tcp://artemis-node-b:61616)?ha=true"; > > // create the factory > ActiveMQConnectionFactory factory = new > ActiveMQConnectionFactory(brokerUrl); > > factory.setUser("artemis"); > factory.setPassword("artemis"); > > factory.setRetryInterval(1000); > factory.setRetryIntervalMultiplier(1.5); > factory.setMaxRetryInterval(10000); > factory.setReconnectAttempts(-1); > return factory; > } > > > I also tried to use spring library > *org.springframework.boot:spring-boot-starter-activemq* (which uses > activemq-client underneath) with next configuration: > > @Bean > public ConnectionFactory connectionFactory() { > ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory(); > > // Failover broker URL (auto-reconnect) > > > factory.setBrokerURL("failover:(tcp://artemis-node-a:61616,tcp://artemis-node-b:61616)?randomize=false"); > > factory.setUserName("artemis"); > factory.setPassword("artemis"); > > return factory; > } > > > and the consumer successfully reconnects. > > Could you please let me know what is the reason why the consumer doesn't > automatically reconnect on failover with artemis-jakarta-client library? > > Thanks! Best regards. > > > пн, 27 окт. 2025 г. в 20:52, Justin Bertram <[email protected]>: > > > ActiveMQ Artemis provides the necessary JMS client implementation > > libraries. If you're using a relatively recent version of Spring this is > > the depenency you need to add in your Maven pom.xml: > > > > <dependency> > > <groupId>org.apache.activemq</groupId> > > <artifactId>artemis-jakarta-client</artifactId> > > <version>2.43.0</version> <!-- currently the latest release --> > > </dependency> > > > > More details are available in the documentation [1]. > > > > > > Justin > > > > [1] > > > > > https://activemq.apache.org/components/artemis/documentation/latest/client-classpath.html#the-client-classpath > > > > On Mon, Oct 27, 2025 at 12:10 PM Illia <[email protected]> wrote: > > > > > Hi Justin. > > > Thanks for your response. > > > > > > There is no specific reason why we decided to use Core API. > > > > > > Could you please suggest JMS API libraries that we can integrate to our > > app > > > instead of Core API? > > > > > > Thanks! Best regards. > > > > > > пн, 27 окт. 2025 г. в 18:02, Justin Bertram <[email protected]>: > > > > > > > You're using the Core API in your application. This is a low-level > API > > > > meant for applications that want to strictly manage their own > > resources. > > > I > > > > think this is the wrong API for your use-case. > > > > > > > > You're managing the creation of the queue(s) yourself, but you don't > > want > > > > to your application to manage the deletion of the queues as it would > > add > > > > unwanted complexity. Therefore, the broker is managing the deletion > of > > > the > > > > queue(s). However, the broker is deleting them in a manner that's > > causing > > > > problems for your application since your application is apparently > > > > expecting the queue to be there when it isn't. > > > > > > > > I recommend you simply use the JMS API and let the broker handle both > > the > > > > creation & deletion of the resources as needed. You're already using > > > Spring > > > > which has strong integration with JMS so you could likely simplify > your > > > > application a fair bit by switching. > > > > > > > > Is there a specific reason you're using the Core API rather than the > > JMS > > > > API? > > > > > > > > > > > > Justin > > > > > > > > On Fri, Oct 24, 2025 at 1:29 PM Illia <[email protected]> > wrote: > > > > > > > > > Hi Justin. > > > > > I have some kind of video conferencing app where I need to create > > many > > > > > addresses/queues for each session/call. > > > > > Setting the auto delete flag to false means that I will need to > clean > > > > > unused addresses and queues manually with the help of a scheduler > > which > > > > > complicates the solution. > > > > > > > > > > Is there any way to start taking into consideration auto delete > > delay? > > > So > > > > > when failover is done, the queue is not deleted automatically but > > only > > > > > after a specified time? > > > > > > > > > > Thanks! Best regards. > > > > > > > > > > чт, 23 окт. 2025 г. в 17:51, Justin Bertram <[email protected]>: > > > > > > > > > > > I tracked this behavior down to ARTEMIS-3525 [1]. On start the > > broker > > > > > will > > > > > > explicitly delete empty queues that are to be auto-deleted. > > > > > > > > > > > > That said, if auto-creation is enabled and you're using a > protocol > > > > where > > > > > > auto-creation is supported then the queue should be re-created > > when a > > > > > > message is sent to it or a consumer is created on it. > > > > > > > > > > > > Is there a particular reason that you don't want to delete queues > > > > > > immediately after failover when the queue auto-delete flag is set > > to > > > > > true? > > > > > > Have you considered setting the auto-delete flag to false so that > > > this > > > > > > doesn't happen? > > > > > > > > > > > > > > > > > > Justin > > > > > > > > > > > > [1] https://issues.apache.org/jira/browse/ARTEMIS-3525 > > > > > > > > > > > > On Wed, Oct 22, 2025 at 8:10 PM Illia <[email protected]> > > > wrote: > > > > > > > > > > > > > Hi Justin. > > > > > > > I have prepared a Java app for you. The link - > > > > > > > > > > > > > > > > > > > > > > > > > > > > https://drive.google.com/file/d/1aLExH0nWTtWvdjFTw6KJIdid5wTXlJ9J/view?usp=sharing > > > > > > > Steps to reproduce the issue: > > > > > > > 1. Build Java app with *./mvnw clean package* > > > > > > > 2. Start docker compose *docker compose up* which will start > java > > > > > client > > > > > > > and 2 artemis nodes in replication mode (active and backup). > > > > > > > 3. After the application is started, an address with the name > > > > > > > "new-address" and a queue with the name "new-queue" are > created. > > > > > > > 4. Stop active node with *docker stop artemis-node-a* > > > > > > > 5. Go to *http://localhost:8162/console/artemis > > > > > > > <http://localhost:8162/console/artemis> *where you can observe > > > that > > > > > > > address was replicated and queue was not > > > > > > > [image: image.png] > > > > > > > [image: image.png] > > > > > > > > > > > > > > 6. The reason is that my queue is configured with autodelete: > > > > > > > [image: image.png] > > > > > > > 7. If you remove autoDelete and autoDeleteDeley lines and > repeat > > > > > > > everything from the beginning, you will notice that both > address > > > and > > > > > > queue > > > > > > > are successfully replicated. > > > > > > > > > > > > > > My goal is to not delete queues immediately after failover when > > the > > > > > queue > > > > > > > auto delete flag is set to true. Is it even possible? > > > > > > > > > > > > > > Thanks! Best regards. > > > > > > > > > > > > > > ср, 22 окт. 2025 г. в 06:07, Justin Bertram < > [email protected] > > >: > > > > > > > > > > > > > >> Nothing in the address-settings seems problematic. Can you > work > > up > > > > > some > > > > > > >> instructions or ideally an automated reproducer so that I can > > > > observe > > > > > > the > > > > > > >> same behavior that you described? > > > > > > >> > > > > > > >> > > > > > > >> Justin > > > > > > >> > > > > > > >> On Tue, Oct 21, 2025 at 4:52 PM Illia < > [email protected]> > > > > > wrote: > > > > > > >> > > > > > > >> > Hi Justin. > > > > > > >> > This my settings in broker.xml: > > > > > > >> > > > > > > > >> > <address-setting match="#"> > > > > > > >> > <dead-letter-address>DLQ</dead-letter-address> > > > > > > >> > <expiry-address>ExpiryQueue</expiry-address> > > > > > > >> > <redelivery-delay>0</redelivery-delay> > > > > > > >> > > > > > > > >> > > > > > > > >> > > > > > > > >> > > > > > > > > > > > > <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-delete-queues>false</auto-delete-queues> > > > > > > >> > <auto-delete-addresses>false</auto-delete-addresses> > > > > > > >> > > > > > > > >> > <!-- The size of each page file --> > > > > > > >> > <page-size-bytes>10M</page-size-bytes> > > > > > > >> > > > > > > > >> > <!-- When we start applying the address-full-policy, e.g > > > > paging > > > > > > --> > > > > > > >> > <!-- Both are disabled by default, which means we will > use > > > the > > > > > > >> > global-max-size/global-max-messages --> > > > > > > >> > <max-size-bytes>-1</max-size-bytes> > > > > > > >> > <max-size-messages>-1</max-size-messages> > > > > > > >> > > > > > > > >> > <!-- When we read from paging into queues (memory) --> > > > > > > >> > > > > > > > >> > <max-read-page-messages>-1</max-read-page-messages> > > > > > > >> > <max-read-page-bytes>20M</max-read-page-bytes> > > > > > > >> > > > > > > > >> > <!-- Limit on paging capacity before starting to throw > > > errors > > > > > --> > > > > > > >> > > > > > > > >> > <page-limit-bytes>-1</page-limit-bytes> > > > > > > >> > <page-limit-messages>-1</page-limit-messages> > > > > > > >> > </address-setting> > > > > > > >> > > > > > > > >> > > > > > > > >> > ср, 22 окт. 2025 г. в 00:15, Justin Bertram < > > > [email protected] > > > > >: > > > > > > >> > > > > > > > >> > > Can you provide the address settings that correspond to > this > > > > > queue? > > > > > > >> > > > > > > > > >> > > For what it's worth, setting the auto-delete message-count > > on > > > > the > > > > > > >> queue > > > > > > >> > to > > > > > > >> > > -1 is not normal as that means the broker will delete the > > > queue > > > > > > >> > regardless > > > > > > >> > > of the number of messages it contains. It might make sense > > > > > depending > > > > > > >> on > > > > > > >> > > your use-case, but folks typically don't want to delete > > their > > > > > > messages > > > > > > >> > > automatically. > > > > > > >> > > > > > > > > >> > > > > > > > > >> > > Justin > > > > > > >> > > > > > > > > >> > > On Tue, Oct 21, 2025 at 3:28 PM Illia < > > > [email protected]> > > > > > > >> wrote: > > > > > > >> > > > > > > > > >> > > > Hi team. Could you please help me with the next issue. > > > > > > >> > > > > > > > > > >> > > > My cluster consists of two nodes with replication mode > > (live > > > > and > > > > > > >> > backup) > > > > > > >> > > > that are configured to auto delete queues. > > > > > > >> > > > > > > > > > >> > > > When my active node fails, I see that only addresses are > > > > > > replicated > > > > > > >> to > > > > > > >> > > the > > > > > > >> > > > backup node but not queues. Seems that the reason is > that > > my > > > > > > queues > > > > > > >> are > > > > > > >> > > > configured for auto delete. Queue replication works fine > > > > without > > > > > > the > > > > > > >> > auto > > > > > > >> > > > delete flag. I tried to set up an auto delete delay but > it > > > > seems > > > > > > >> that > > > > > > >> > it > > > > > > >> > > > still doesn’t work with failover. > > > > > > >> > > > > > > > > > >> > > > My goal is to not delete queues immediately after > failover > > > > when > > > > > > the > > > > > > >> > queue > > > > > > >> > > > auto delete flag is set to true. > > > > > > >> > > > > > > > > > >> > > > Is there any way to do this? > > > > > > >> > > > > > > > > > >> > > > Here is my queue configuration in Java code: > > > > > > >> > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > > >> > > > *final QueueConfiguration queueConfig = > > > > > > >> > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > QueueConfiguration.of(queueName).setAddress(addressName).setRoutingType(RoutingType.ANYCAST).setAutoDelete(true).setAutoDeleteDelay(30000L).setAutoDeleteMessageCount(-1L).setPurgeOnNoConsumers(false).setNonDestructive(false);* > > > > > > >> > > > > > > > > > >> > > > Thanks! Best regards. > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > >
