@JmsListener usage for publish-subscribe topic

后端 未结 2 1890
隐瞒了意图╮
隐瞒了意图╮ 2020-12-28 19:11

I am trying to create example for publish-subscribe based on @JmsListener annotation: https://github.com/lkrnac/book-eiws-code-samples/tree/master/05-jms/0515-publish-subscr

2条回答
  •  南笙
    南笙 (楼主)
    2020-12-28 19:48

    When using a @JmsListener it uses a DefaultMessageListenerContainer which extends JmsDestinationAccessor which by default has the pubSubDomain set to false. When this property is false it is operating on a queue. If you want to use topics you have to set this properties value to true.

    As you are using Spring Boot you can quite easily set this property to true by adding the spring.jms.pub-sub-domain property to the application.properties and set it to true.

    spring.jms.pub-sub-domain=true
    

    When using a @JmsListener it is looking for a jmsListenerContainerFactory named bean, if that isn't available a default one is expected. You can also include your own bean and programmatically set this property yo true.

    @Bean
    public DefaultMessageListenerContainer jmsListenerContainerFactory() {
        DefaultMessageListenerContainer dmlc = new DefaultMessageListenerContainer();
        dmlc.setPubSubDomain(true);
        // Other configuration here
        return dmlc;
    }
    

    This would of course also work but would be more work, more information on this can be found in the documentation of the @EnableJms annotation.

提交回复
热议问题