启动和停止@JmsListener
Start and Stop @JmsListener
我正在使用 spring 引导并有 @EnableJms
如果我只使用注释 @JmsListener(destination = "xxxxxx")
并依赖于 spring 引导自动配置,我如何启动和停止 jmslistener 知道我将它设置为自动启动 false
jms:
listener:
max-concurrency: 10
concurrency: 1
auto-startup: false
问题是我如何访问 SimpleMessageListenerContainer
或 DefaultMessageListenerContainer
请参阅 - 可以通过注册表访问各个容器,或者您可以 start/stop 注册表以 start/stop 所有容器。
编辑:
是个bug,我开了一个JIRA Issue;解决方法是在开始之前重置自动启动...
@SpringBootApplication
public class So36332914Application {
public static void main(String[] args) throws Exception {
ConfigurableApplicationContext context = SpringApplication.run(So36332914Application.class, args);
JmsTemplate template = context.getBean(JmsTemplate.class);
JmsListenerEndpointRegistry registry = context.getBean(JmsListenerEndpointRegistry.class);
System.out.println(registry.getListenerContainerIds().size() + " containers");
System.out.println("Running: " + registry.isRunning());
// https://jira.spring.io/browse/SPR-14105
for (MessageListenerContainer container : registry.getListenerContainers()) {
((AbstractJmsListeningContainer) container).setAutoStartup(true);
}
registry.start();
System.out.println("Running: " + registry.isRunning());
template.convertAndSend("foo", "bar");
registry.stop();
System.out.println("Running: " + registry.isRunning());
context.getBean(Foo.class).latch.await(10, TimeUnit.SECONDS);
context.close();
}
@Bean
public Foo foo() {
return new Foo();
}
public static class Foo {
private final CountDownLatch latch = new CountDownLatch(1);
@JmsListener(destination="foo")
public void foo(String foo) {
System.out.println(foo);
latch.countDown();
}
}
}
我正在使用 spring 引导并有 @EnableJms
如果我只使用注释 @JmsListener(destination = "xxxxxx")
并依赖于 spring 引导自动配置,我如何启动和停止 jmslistener 知道我将它设置为自动启动 false
jms:
listener:
max-concurrency: 10
concurrency: 1
auto-startup: false
问题是我如何访问 SimpleMessageListenerContainer
或 DefaultMessageListenerContainer
请参阅
编辑:
是个bug,我开了一个JIRA Issue;解决方法是在开始之前重置自动启动...
@SpringBootApplication
public class So36332914Application {
public static void main(String[] args) throws Exception {
ConfigurableApplicationContext context = SpringApplication.run(So36332914Application.class, args);
JmsTemplate template = context.getBean(JmsTemplate.class);
JmsListenerEndpointRegistry registry = context.getBean(JmsListenerEndpointRegistry.class);
System.out.println(registry.getListenerContainerIds().size() + " containers");
System.out.println("Running: " + registry.isRunning());
// https://jira.spring.io/browse/SPR-14105
for (MessageListenerContainer container : registry.getListenerContainers()) {
((AbstractJmsListeningContainer) container).setAutoStartup(true);
}
registry.start();
System.out.println("Running: " + registry.isRunning());
template.convertAndSend("foo", "bar");
registry.stop();
System.out.println("Running: " + registry.isRunning());
context.getBean(Foo.class).latch.await(10, TimeUnit.SECONDS);
context.close();
}
@Bean
public Foo foo() {
return new Foo();
}
public static class Foo {
private final CountDownLatch latch = new CountDownLatch(1);
@JmsListener(destination="foo")
public void foo(String foo) {
System.out.println(foo);
latch.countDown();
}
}
}