Try PubSub+

Acknowledging messages using Spring JMS

asx19asx19 Member Posts: 2

Hello,
I would like to manually acknowledge each message I receive from the Solace queue using the JMS protocol. However with the configuration I have below, I am seeing that the messages are actually not being removed even after I explicitly call "message.acknowledge()" on the message.

@Bean()
    public DefaultJmsListenerContainerFactory connectionFactory(SolConnectionFactory solConnectionFactory, SolaceErrorHandler errorHandler) {
        DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
        factory.setConnectionFactory(solConnectionFactory);
        factory.setErrorHandler(errorHandler);
        factory.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
        return factory;
    }

I couldn't really find much documentation on manually ack-ing each message in the application. Should I be changing something here?

Thanks in advance

Best Answer

  • asx19asx19 Member Posts: 2
    edited August 25 Accepted Answer

    Hi @marc,
    Thanks-- using SupportedProperty.SOL_CLIENT_ACKNOWLEDGE indeed solved the problem.

Answers

  • marcmarc Member, Administrator, Moderator, Employee Posts: 176 admin
    edited August 25

    Hi @asx19 ,
    Are you using the @JmsListener annotation on the receiving method?
    If yes, can you try adding a name of "jmsListenerContainerFactory" to your DefaultJmsListenerContainerFactory bean and seeing if that works for you?

        @Bean(name = "jmsListenerContainerFactory")
        public DefaultJmsListenerContainerFactory connectionFactory(SolConnectionFactory solConnectionFactory) {
            DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
            factory.setConnectionFactory(solConnectionFactory);
            factory.setErrorHandler(errorHandler);
            factory.setSessionAcknowledgeMode(Session.CLIENT_ACKNOWLEDGE);
            return factory;
        }
    

    Once you get it working another thing to look into is whether you want to use the JMS default Session.CLIENT_ACKNOWLEDGE or if you want to use SupportedProperty.SOL_CLIENT_ACKNOWLEDGE

    Hope that helps!
    -Marc

  • marcmarc Member, Administrator, Moderator, Employee Posts: 176 admin

    @asx19 said:
    Hi @marc,
    Thanks-- using SupportedProperty.SOL_CLIENT_ACKNOWLEDGE indeed solved the problem.

    Awesome, glad I could help!

Sign In or Register to comment.