Spring 集成默认消息侦听器容器 IsRunning false
Spring Integration Default Message Listener Container IsRunning false
我使用以下配置在 Java DSL 中定义了一个 JMS 消息侦听器。听众工作正常。它按预期处理来自队列的消息。我没有配置自动启动,因为默认值为 true,我需要在应用程序启动后监听器为 运行。当我尝试在应用程序启动期间调用 isRunning() 方法时,isRunning 方法 returns 为 false。我在这里缺少一些配置吗
/**
Configuration for the Message Listener
**/
@Bean
public DefaultMessageListenerContainer inListener(){
DefaultMessageListenerContainer defaultMessageListenerContainer = new DefaultMessageListenerContainer();
defaultMessageListenerContainer.setConnectionFactory((ConnectionFactory)connectionFactory().getObject());
defaultMessageListenerContainer.setDestinationName(queueName);
defaultMessageListenerContainer.setIdleTaskExecutionLimit(100);
defaultMessageListenerContainer.setMaxConcurrentConsumers(1);
defaultMessageListenerContainer.setSessionTransacted(true);
defaultMessageListenerContainer.setPubSubDomain(false);
defaultMessageListenerContainer.setDestinationResolver(jndiDestResolver);
}
@Bean
public JndiObjectFactoryBean connectionFactory(){
JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
jndiObjectFactoryBean.setJndiTemplate(jndiTemplate);
jndiObjectFactoryBean.setJndiName(jndiName);
return jndiObjectFactoryBean;
}
消息监听器
@Bean
public IntegrationFlow adapter(){
return IntegrationFlow.from(Jms.messageDrivenChannelAdapter(inListener()).channel(inputChannel()).get();
}
IsRunning 代码:此代码正在另一个 class 的后构造方法中使用。 Autostartup 的第一个打印语句打印 true,而 isRunning 打印语句打印 false。这里是否缺少某些配置
AbstractMessageListenerContainer listener = (AbstractMessageListenerContainer) applicationContext.getBean("inListener");
System.out.println("Autostartup: "+ listener.isAutoStartup());
System.out.println("Running: "+ listener.isRunning());
@PostConstruct
对于生命周期控制来说还为时过早。这完全等同于特定 bean 的 afterPropertiesSet()
。当应用程序上下文中的所有 bean 都已经准备好时,autoStartup 生命周期的 start()
稍后会被调用。
对于您的逻辑,您应该真正考虑实现一个 SmartLifecycle
来执行所需的逻辑。
我使用以下配置在 Java DSL 中定义了一个 JMS 消息侦听器。听众工作正常。它按预期处理来自队列的消息。我没有配置自动启动,因为默认值为 true,我需要在应用程序启动后监听器为 运行。当我尝试在应用程序启动期间调用 isRunning() 方法时,isRunning 方法 returns 为 false。我在这里缺少一些配置吗
/**
Configuration for the Message Listener
**/
@Bean
public DefaultMessageListenerContainer inListener(){
DefaultMessageListenerContainer defaultMessageListenerContainer = new DefaultMessageListenerContainer();
defaultMessageListenerContainer.setConnectionFactory((ConnectionFactory)connectionFactory().getObject());
defaultMessageListenerContainer.setDestinationName(queueName);
defaultMessageListenerContainer.setIdleTaskExecutionLimit(100);
defaultMessageListenerContainer.setMaxConcurrentConsumers(1);
defaultMessageListenerContainer.setSessionTransacted(true);
defaultMessageListenerContainer.setPubSubDomain(false);
defaultMessageListenerContainer.setDestinationResolver(jndiDestResolver);
}
@Bean
public JndiObjectFactoryBean connectionFactory(){
JndiObjectFactoryBean jndiObjectFactoryBean = new JndiObjectFactoryBean();
jndiObjectFactoryBean.setJndiTemplate(jndiTemplate);
jndiObjectFactoryBean.setJndiName(jndiName);
return jndiObjectFactoryBean;
}
消息监听器
@Bean
public IntegrationFlow adapter(){
return IntegrationFlow.from(Jms.messageDrivenChannelAdapter(inListener()).channel(inputChannel()).get();
}
IsRunning 代码:此代码正在另一个 class 的后构造方法中使用。 Autostartup 的第一个打印语句打印 true,而 isRunning 打印语句打印 false。这里是否缺少某些配置
AbstractMessageListenerContainer listener = (AbstractMessageListenerContainer) applicationContext.getBean("inListener");
System.out.println("Autostartup: "+ listener.isAutoStartup());
System.out.println("Running: "+ listener.isRunning());
@PostConstruct
对于生命周期控制来说还为时过早。这完全等同于特定 bean 的 afterPropertiesSet()
。当应用程序上下文中的所有 bean 都已经准备好时,autoStartup 生命周期的 start()
稍后会被调用。
对于您的逻辑,您应该真正考虑实现一个 SmartLifecycle
来执行所需的逻辑。