如何配置和启用 JMS 侦听器以根据某些条件使用消息?
How to configure and enable a JMS Listener to consume messages based on some condition?
我的应用程序中有两个侦听器(fooMessages
和 barMessages
),它们都连接到同一个队列。在某个时间点,只有一个侦听器会根据某种条件使用队列中的消息。在 application.yml
文件中,如果 fooEnabled
设置为 true
,则 fooMessages
侦听器应使用消息,如果 fooEnabled
设置为 false
,则 barMessages
监听器应该消费消息。
听众:
@JMSListener(destination="${queueName}", selector = "${selectorName}")
public void fooMessages(Message message) {
// foo logic
}
@JMSListener(destination="${queueName}", selector = "${selectorName}")
public void barMessages(Message message) {
// bar logic
}
application.yml
文件:
queueName: myqueue
selectorName: "priority=medium"
fooEnable: true
如何配置侦听器来处理这种情况?
- 给每个听众一个
id
- 将容器工厂配置为不自动启动侦听器https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#application-properties.integration.spring.jms.listener.auto-startup
- 使用
JmsListenerEndpointRegistry
bean 手动启动容器 - registry.getListenerContainer("fooListener").start();
@Bean
ApplicationRunner runner(@Value("${fooEnabled}") boolean fooEnabled,
@Value("${barEnabled}") boolean barEnabled, JmsListenerEndpointRegistry registry) {
return args -> {
if (fooEnabled) ...
}
}
我的应用程序中有两个侦听器(fooMessages
和 barMessages
),它们都连接到同一个队列。在某个时间点,只有一个侦听器会根据某种条件使用队列中的消息。在 application.yml
文件中,如果 fooEnabled
设置为 true
,则 fooMessages
侦听器应使用消息,如果 fooEnabled
设置为 false
,则 barMessages
监听器应该消费消息。
听众:
@JMSListener(destination="${queueName}", selector = "${selectorName}")
public void fooMessages(Message message) {
// foo logic
}
@JMSListener(destination="${queueName}", selector = "${selectorName}")
public void barMessages(Message message) {
// bar logic
}
application.yml
文件:
queueName: myqueue
selectorName: "priority=medium"
fooEnable: true
如何配置侦听器来处理这种情况?
- 给每个听众一个
id
- 将容器工厂配置为不自动启动侦听器https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#application-properties.integration.spring.jms.listener.auto-startup
- 使用
JmsListenerEndpointRegistry
bean 手动启动容器 -registry.getListenerContainer("fooListener").start();
@Bean
ApplicationRunner runner(@Value("${fooEnabled}") boolean fooEnabled,
@Value("${barEnabled}") boolean barEnabled, JmsListenerEndpointRegistry registry) {
return args -> {
if (fooEnabled) ...
}
}