如何在 Spring Java Config 的单个 MessageListenerContainer 中添加多个 JMS MessageListner

Posted

技术标签:

【中文标题】如何在 Spring Java Config 的单个 MessageListenerContainer 中添加多个 JMS MessageListner【英文标题】:How to add multiple JMS MessageListners in a single MessageListenerContainer for Spring Java Config 【发布时间】:2014-03-19 20:27:39 【问题描述】:

我的 spring-config.xml 中有以下 xml 代码

<jms:listener-container acknowledge="auto"
        connection-factory="cachedConnectionFactory" container-type="default"
        error-handler="consumerErrorHandler" concurrency="20-25">
        <jms:listener destination="#TaskFinished.destination"
            method="onMessage" ref="taskFinished" />
</jms:listener-container>

现在,我正在将我的 spring xml 配置文件转换为 Java 配置。

我是这样翻译的

@Bean(name = "consumerJmsListenerContainer")
public DefaultMessageListenerContainer consumerJmsListenerContainer() 
    DefaultMessageListenerContainer messageListenerContainer = new DefaultMessageListenerContainer();
    messageListenerContainer
            .setConnectionFactory(cachingConnectionFactory());
    messageListenerContainer.setConcurrency("20-25");
    messageListenerContainer.setErrorHandler(new ConsumerErrorHandler());
    messageListenerContainer
            .setSessionAcknowledgeMode(Session.AUTO_ACKNOWLEDGE);
    messageListenerContainer.setMessageListener(new TaskFinished());
    return messageListenerContainer;

我需要知道的是,Message Container 中是否有多个 MessageListner,例如

<jms:listener-container acknowledge="auto"
        connection-factory="cachedConnectionFactory" container-type="default"
        error-handler="consumerErrorHandler" concurrency="20-25">
        <jms:listener destination="#questionGeneration.destination"
            method="onMessage" ref="questionGeneration" />
        <jms:listener destination="#friendShipLogic.destination"
            method="onMessage" ref="friendShipLogic" />
        <jms:listener destination="#postAvailabilityChecker.destination"
            method="onMessage" ref="postAvailabilityChecker" />
        <jms:listener destination="#playOn.destination" method="onMessage"
            ref="playOn" />
</jms:listener-container>

我应该如何将此 xml 代码转换为 Java 配置?

【问题讨论】:

【参考方案1】:

您可以添加多个注释,每个注释都有自己的并发性。

@JmsListener(id="1", destination = "mydestination", containerFactory = "myfactory", concurrency ="1-5")

@JmsListener(id="2", destination = "mydestination", containerFactory = "myfactory", concurrency = "3-5")

【讨论】:

【参考方案2】:

您可以添加container.setConcurrentConsumers(10);,其中消费者数量为10

【讨论】:

【参考方案3】:

命名空间只是为了方便——每个&lt;jms:listener/&gt; 元素都有自己的DMLC;外部(容器)元素只是提供公共属性的工具。

【讨论】:

以上是关于如何在 Spring Java Config 的单个 MessageListenerContainer 中添加多个 JMS MessageListner的主要内容,如果未能解决你的问题,请参考以下文章

如何在基于 JAVA 的 spring config 中配置 Hibernate Db 连接设置

如何在使用 java config 创建 spring bean 时传递 JobParameters

如何在spring security java config中通过jsp表单更新用户详细信息

java开发 从哪些地方可以看出来spring使用的单例模式?

Spring MVC系列Java中的单例模式

Spring Boot Java Config 设置会话超时