java - 添加动态数量的监听器(Spring JMS)

标签 java spring spring-boot jms 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
}

有什么办法可以实现吗?

最佳答案

您不能使用带注释的 @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/

相关文章:

java - 乘法口诀表中如何设置空格

Spring Redis Delete不删除key

java - 这个Spring Boot程序的工作流程是怎样的

spring - 如何声明父应用程序上下文

java - 未应用 ActiveMQ 5.7.0 redeliveryPolicy

java - 我的 thymeleaf html 表单有什么问题吗?为什么密码显示值为空?

java - Spring Boot Maven pom.xml 不存在

java - 单击鼠标重新绘制框架?

java - 为什么 Java Thread 会扭曲控制台的打印

Java 到 EDI 转换的 Java 库