多个目的地和消费者的Spring配置

时间:2012-10-10 07:53:33

标签: spring jms containers messaging

我正在使用一个带有一个目标和一个Consumer(消息监听器)的消息侦听器容器:

<bean id="msgListenerContainer"

  class="org.springframework.jms.listener.DefaultMessageListenerContainer" 

  p:connectionFactory-ref="connectionFactory"

  p:destination-ref="destination"

  p:messageListener-ref="messageHandler"

  p:concurrentConsumers="10"

  p:maxConcurrentConsumers="50"

  p:receiveTimeout="5000"

  p:idleTaskExecutionLimit="10"

  p:idleConsumerLimit="5" />

如果我想要多个目的地,并且每个目的地都有一个消息监听器,我该怎么办? 如果我想为一个目的地多个听众,我该怎么办?

1 个答案:

答案 0 :(得分:3)

1)您需要将spring应用程序上下文中的每个Message Listener和producer定义为bean。像这样:

    <!-- MESSAGE LISTENER CONTAINER -->
<bean id="ListListenerContainer"
    class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="messageListener" ref="messageListener" />
    <property name="connectionFactory" ref="qcf" />
    <property name="destinationResolver" ref="JmsDestinationResolver" />
    <property name="receiveTimeout" value="${jms-timeout}" />
    <property name="destinationName" value="${jms-list-topic}" />
    <property name="concurrency" value="1" />
    <property name="pubSubDomain" value="true" />
    <property name="subscriptionDurable" value="${jms-durable-flag}"/>
    <property name="durableSubscriptionName" value="${jms-list-durable-name}" />
    <property name="clientId" value="${jms-list-client-id}"/>
    <property name="sessionTransacted" value="true"/>
</bean> 


<bean id="publisher-1" class="com.stack.overflow.JmsPublisherImpl">
    <constructor-arg ref="jmsTemplate" />
</bean> 

2)然后,您可以使用自动装配或在应用程序上下文中定义相关的生产者(见下文)来处理消息。即上面的Message Listener bean引用的类:

<bean id="messageListener" class="com.stack.overflow.MessageHandler">
        <property name="publisher" ref="publisher-1" />
</bean>

这只是1-2-1的映射。对于任何其他路由,您可以添加多个发布者(如上所述),然后由您决定如何实现所需的路由逻辑以确定哪些主题/队列应发布从消费者1等接收的消息等