小编典典

添加动态侦听器数量(Spring JMS)

spring-boot

我需要添加application.properties文件中提到的多个侦听器。像下面一样

InTopics=Sample.QUT4,Sample.T05,Sample.T01,Sample.JT7

注意:此数字可以更多或更少。

我正在考虑将它们排列成阵列,

@Value("${InTopics}")
private String[] inTopics;

但是我不知道如何从数组创建多个侦听器。

目前,对于一个主题,我正在执行以下操作,

@Configuration
@EnableJms
public class JmsConfiguration {

@Value("${BrokerURL}")
private String brokerURL;

@Value("${BrokerUserName}")
private String brokerUserName;

@Value("${BrokerPassword}")
private String brokerPassword;

@Bean
TopicConnectionFactory connectionFactory() throws JMSException {
    TopicConnectionFactory connectionFactory = new TopicConnectionFactory(brokerURL, brokerUserName, brokerPassword);
    return connectionFactory;
}

@Bean
JmsListenerContainerFactory<?> jmsContainerFactory(TopicConnectionFactory connectionFactory) throws JMSException {
    SimpleJmsListenerContainerFactory factory = new SimpleJmsListenerContainerFactory();
    factory.setConnectionFactory(connectionFactory);
    factory.setPubSubDomain(Boolean.TRUE);
    return factory;
 }

}

还有我的听众

@JmsListener(destination = "${SingleTopicName}", containerFactory = "jmsContainerFactory")
public void receiveMessage(Message msg) {
   //Do Some Stuff
}

我有什么办法可以做到这一点?


阅读 452

收藏
2020-05-30

共1个答案

小编典典

您无法使用带注释的@JmsListeners
进行此操作,但可以通过扩展JmsListenerConfigurer(如参考文档中所述)以编程方式注册每个侦听器。

编辑

由于您将属性作为数组注入…

@Value("${InTopics}")
private String[] inTopics;

Spring将拆分列表,并根据列表中的队列数创建一个数组。

然后,您可以遍历数组JmsListenerConfigurer.configureJmsListeners()并为数组中的每个元素创建一个端点-
您无需事先知道数组的大小。

for (String inTopic : inTopics) {
    ...
}
2020-05-30