[英]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.