Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

@JmsListener issue with durable subscription

I am using Spring's @JmsListener (spring-jms-4.3.4.RELEASE.jar) for receiving messages from ActiveMQ using the below code:

@Component
public class TopicSubscriber {
    @JmsListener(destination="xyz.topic1", subscription="xyz_topic_durable_subscription")
    public void send(Product product) {     
        System.out.println(" reveived message ***"+product);
    }
}

As per the Spring API's documentation (link given below), the above code should create a durable subscription with subscription name as xyz_topic_durable_subscription:

http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/jms/annotation/JmsListener.html#subscription--

But, the issue is that the above code creates only Non-Durable subscription which I could find by monitoring the ActiveMQ using admin console (added screenshot below, look for 'xyz.topic1' Destination under 'Active Non-Durable Topic Subscribers' section).

Are there any changes to be made in the code to make the durable subscription ?

like image 318
developer Avatar asked Nov 29 '25 11:11

developer


1 Answers

You need to configure the ListenerContainerFactory appropriately:

@Bean
public JmsListenerContainerFactory<?> myFactory(ConnectionFactory connectionFactory,
                                                DefaultJmsListenerContainerFactoryConfigurer configurer) {
    DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
    factory.setPubSubDomain(true);
    factory.setSubscriptionDurable(true);
    factory.setClientId("jmsDemo");
    // This provides all boot's default to this factory, including the message converter
    configurer.configure(factory, connectionFactory);
    // You could still override some of Boot's default if necessary.
    return factory;
}

There interesting part is here:

    factory.setSubscriptionDurable(true);
    factory.setClientId("jmsDemo");

Now when you enter the ActiveMQ WebConsole you should see this:

ActiveMQ WebConsole showing one Durable Topic Subscriber

like image 149
Paweł Motyl Avatar answered Dec 02 '25 01:12

Paweł Motyl



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!