当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《添加动态侦听器数量(SpringJMS)》经验,为你挑选了1个好方法。

我需要添加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
}

有什么方法可以达到这个目的吗?



1> Gary Russell..:

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

编辑

因为您将属性作为数组注入...

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

Spring将根据列表中的队列数分割列表创建一个数组.

然后,您可以迭代数组JmsListenerConfigurer.configureJmsListeners()并为数组中的每个元素创建一个端点 - 您不需要提前知道数组的大小.

for (String inTopic : inTopics) {
    ...
}

推荐阅读
sx-March23
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有