簡體   English   中英

使用JmsListenerConfigurer的Spring Boot持久JMS使用者

[英]Spring Boot Durable JMS Consumer using JmsListenerConfigurer

我正在使用SpringBoot和activeMQ設置持久的JMS主題使用者。 使用spring boot @JmsListener批注,我能夠使一切正常運行(成功地作為持久用戶運行)。 但是,由於我想動態創建偵聽器,因此我嘗試使用JmsListenerConfiguraion接口創建偵聽器。

使用主題使用者下面的代碼可以成功創建並使用消息。 但是,問題在於它創造的消費者並不持久。 我在工廠將clientId,setSubscriptionDurable設置為true,並將setPubSubDomain設置為true。 我想念什么?

@Configuration
@EnableJms
public class ListenerConfigurer implements JmsListenerConfigurer {

    @Autowired
    private List<JmsListenerConfig> listenerConfigs;


    @Autowired
    private ConnectionFactory connectionFactory;


    @Override
    public void configureJmsListeners(JmsListenerEndpointRegistrar registrar) {

        for(JmsListenerConfig jmsListenerConfig : listenerConfigs) {

            SimpleJmsListenerEndpoint endpoint = new SimpleJmsListenerEndpoint();
            endpoint.setId(jmsListenerConfig.getEndpointName());
            endpoint.setDestination(jmsListenerConfig.getEndpointName());
            endpoint.setMessageListener(message -> {
                TextMessage txtMessage = (TextMessage) message;

                try {
                    jmsListenerConfig.getMessageReceiveHandler().handle(txtMessage.getText());
                }catch (JMSException e){
                    e.printStackTrace();
                }
            });

            DefaultJmsListenerContainerFactory factory = new DefaultJmsListenerContainerFactory();
            factory.setConnectionFactory(connectionFactory);
            factory.setSubscriptionDurable(true);
            factory.setPubSubDomain(true);
            factory.setClientId(jmsListenerConfig.getClientUid());

            DefaultMessageListenerContainer container = factory.createListenerContainer(endpoint);
            endpoint.setupListenerContainer(container);

            registrar.registerEndpoint(endpoint, factory);
            registrar.setContainerFactory(factory);
        }
    }
}

我發現了我的問題。 我必須在端點上設置訂閱名稱。

endpoint.setSubscription("some-trivial-subscription-name");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM