如何在 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】:命名空间只是为了方便——每个<jms:listener/>
元素都有自己的DMLC
;外部(容器)元素只是提供公共属性的工具。
【讨论】:
以上是关于如何在 Spring Java Config 的单个 MessageListenerContainer 中添加多个 JMS MessageListner的主要内容,如果未能解决你的问题,请参考以下文章
如何在基于 JAVA 的 spring config 中配置 Hibernate Db 连接设置
如何在使用 java config 创建 spring bean 时传递 JobParameters
如何在spring security java config中通过jsp表单更新用户详细信息