java – 添加动态侦听器数量(Spring JMS)
作者:互联网
我需要添加多个侦听器,如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
}
有什么方法可以达到这个目的吗?
解决方法:
您不能使用带注释的@JmsListeners来执行此操作,但您可以以编程方式注册每个侦听器by extending JmsListenerConfigurer
as described in the reference documentation.
编辑
因为您将属性作为数组注入…
@Value("${InTopics}")
private String[] inTopics;
Spring将根据列表中的队列数分割列表创建一个数组.
然后,您可以在JmsListenerConfigurer.configureJmsListeners()中遍历数组,并为数组中的每个元素创建一个端点 – 您不需要提前知道数组的大小.
for (String inTopic : inTopics) {
...
}
标签:java,spring,spring-boot,jms,spring-jms 来源: https://codeday.me/bug/20190724/1526367.html