Spring Boot-稍后初始化的JMS连接



我正在使用DefaultMessageListenerContainer使用t3协议连接到JMS队列,如果t3协议为UP,它可以正常工作。但是,如果t3 URL是向下的,那么一旦t3 URL是向上的,监听器就不能重新注册Bean。我已经覆盖了Listener来进行调用,但在应用程序启动后无法重新注册Bean。

@Bean
public QueueConnectionFactory queueConnectionFactory() {
Context m_context = getInitialContext();
QueueConnectionFactory queueConnectionFactory = new JMSConnectionFactory();
try {
System.out.println("Connection Factory");
queueConnectionFactory = (QueueConnectionFactory) m_context
.lookup("myconnectionfactory");
} catch (Exception e) {
System.err.println("Exception Connection Factory goes down");            
}
return queueConnectionFactory;
}
@Bean
public Context getInitialContext() {
try {
Properties h = new Properties();
System.out.println("getInitialContext ");
h.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
h.put(Context.PROVIDER_URL, "t3://100.21.101.12:7001");
return new InitialContext(h);
} catch (Exception e) {
System.error.println("Error at getInitialContext");

}
return null;
}
@Bean
public Queue jmsQueue() {
Context m_context = getInitialContext();
Queue jmsQueue = new MQQueue();
try {
System.out.println("jmsQueue ");
jmsQueue = (Queue) m_context.lookup("myqueue");
} catch (Exception e) {
System.error.println("Error at JMS");
}
return jmsQueue;
}

@Bean
public DefaultMessageListenerContainer messageListener() {
DefaultMessageListenerContainer listener = new DefaultMessageListenerContainer();
try {
System.out.println("messageListener ");
listener.setConcurrentConsumers("4");
listener.setConnectionFactory((ConnectionFactory) queueConnectionFactory());
listener.setDestination((Destination) jmsQueue());
listener.setMessageListener(queueListener());
} catch (Exception e) {
System.out.println("Exception >>"+e);            
}
return listener;
}

2022-08-05 15:16:24.615错误56480-[ssageListener-5].be.s.DefaultMessageListenerContainer:无法从DefaultMessageListener'queue:///'刷新目标的JMS连接-使用FixedBackOff重试{interval=5000,currentAttempts=52,maxAttempts=unlimited}。原因:无效

有没有任何方法可以使用Listener来完成这个bean的注册。

这是来自侦听器容器的错误,而不是连接工厂bean的注册。

您应该能够使用将容器设置为不自动启动

spring.jms.listener.auto-startup=false

https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#application-properties.integration.spring.jms.listener.au启动

然后,您可以通过JmsListenerEndpointRegistrybean手动启动它们(在try块中(。

最新更新