我有一個要求來配置DefaultMessageListenerContainer以解析多個目標主題。我不想instanciate多個容器,我想知道如何配置這個,甚至是可能的。Spring集成 - 配置DefaultMessageListenerContainer以解析多個目標
感謝
我有一個要求來配置DefaultMessageListenerContainer以解析多個目標主題。我不想instanciate多個容器,我想知道如何配置這個,甚至是可能的。Spring集成 - 配置DefaultMessageListenerContainer以解析多個目標
感謝
如果您想監聽使用直線彈簧JMS多個主題的消息,您將需要創建這個類的多個實例。唯一的問題是默認情況下每個都會創建自己的TaskExecutor,這有點浪費。爲了解決這個問題,只需在上下文中定義自己的taskExecutor
bean,並且所有消息偵聽器都會自動使用它。
這是一個任務執行器,它可以在獨立的虛擬機中很好地工作,有不同容器的本地工作管理器/線程池功能集成的替代實現。
<bean id="taskExecutor" class="org.springframework.scheduling.quartz.SimpleThreadPoolTaskExecutor">
<property name="waitForJobsToCompleteOnShutdown" value="true"/>
<property name="threadCount" value="20"/>
<property name="threadNamePrefix" value="JmsConsumer"/>
</bean>
或者,使用Spring集成,簡單地創建一個消息信道和多個<jms:message-driven-channel-adapter/>
的 - 每個主題。這裏是一個示例代碼片段:
<bean id="connectionFactory" class="..."/>
<int:channel id="allMessages"/>
<jms:message-driven-channel-adapter channel="allMessages" connection-factory="connectionFactory" destination-name="T.topic1"/>
<jms:message-driven-channel-adapter channel="allMessages" connection-factory="connectionFactory" destination-name="T.topic2"/>
<jms:message-driven-channel-adapter channel="allMessages" connection-factory="connectionFactory" destination-name="T.topic3"/>
<int:service-activator input-channel="allMessages" output-channel="results" ref="messageProcessingBean" method="onMessage"/>
在幕後,Spring Integration將自動創建一個MessageListenerContainer。
還有一種替代方法是使用JMS提供程序/ MOM的路由功能來創建一個路由所有相關消息的單個目標。例如。在RabbitMQ中,您可以創建一個綁定到多個交換機的主題,因此只能使用一個AMQP目標。然而,這與基礎設施有關,對任何給定的JMS提供者都是不可能的。