我需要添加 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
}
有什么办法可以实现吗?
最佳答案
您不能使用带注释的 @JmsListener
来做到这一点,但您可以通过编程方式注册每个监听器 by extending JmsListenerConfigurer
as described in the reference documentation .
编辑
因为您将属性作为数组注入(inject)...
@Value("${InTopics}")
private String[] inTopics;
Spring 将拆分列表并根据列表中的队列数创建一个数组。
然后您可以在 JmsListenerConfigurer.configureJmsListeners()
中遍历数组并为数组中的每个元素创建一个端点 - 您不需要提前知道数组有多大。
for (String inTopic : inTopics) {
...
}
关于java - 添加动态数量的监听器(Spring JMS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34063230/