Spring集成-配置DefaultMessageListenerContainer以解析多个目标

Spring集成-配置DefaultMessageListenerContainer以解析多个目标,spring,spring-integration,Spring,Spring Integration,我需要配置DefaultMessageListenerContainer来解析多个目标主题。我不想实例化多个容器,我想知道如何配置它,甚至是否可能 谢谢如果您希望使用straight Spring JMS侦听来自多个主题的消息,则需要创建此类的多个实例。唯一的问题是,默认情况下,每个遗嘱都会创建自己的TaskExecutor,这有点浪费。要解决这个问题,只需在上下文中定义自己的taskExecutorbean,所有消息侦听器都会自动使用它 这是一个任务执行器,它在独立的VM中工作得很好,有一些替

我需要配置DefaultMessageListenerContainer来解析多个目标主题。我不想实例化多个容器,我想知道如何配置它,甚至是否可能


谢谢

如果您希望使用straight Spring JMS侦听来自多个主题的消息,则需要创建此类的多个实例。唯一的问题是,默认情况下,每个遗嘱都会创建自己的TaskExecutor,这有点浪费。要解决这个问题,只需在上下文中定义自己的
taskExecutor
bean,所有消息侦听器都会自动使用它

这是一个任务执行器,它在独立的VM中工作得很好,有一些替代实现与不同容器的本机工作管理器/线程池功能集成

<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集成,只需创建一个消息通道和多个
,每个主题一个。以下是一个示例片段:

<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集成将自动创建MessageListenerContainer

还有另一种选择是使用JMS提供者/MOM的路由工具创建一个单一目的地,所有相关消息都在该目的地进行路由。例如,在RabbitMQ中,您可以创建一个绑定到多个交换机的主题,因此只能使用一个AMQP目的地。但是,这取决于基础设施,并且在任何给定的JMS提供程序中都不可能实现