如何配置和启用 JMS 侦听器以根据某些条件使用消息?
Posted
技术标签:
【中文标题】如何配置和启用 JMS 侦听器以根据某些条件使用消息?【英文标题】:How to configure and enable a JMS Listener to consume messages based on some condition? 【发布时间】:2022-01-01 15:17:08 【问题描述】:我的应用程序中有两个侦听器(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
如何配置监听器来处理这种情况?
【问题讨论】:
【参考方案1】:-
给每个听众一个
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) ...
【讨论】:
以上是关于如何配置和启用 JMS 侦听器以根据某些条件使用消息?的主要内容,如果未能解决你的问题,请参考以下文章