使用DestinationResolver在Spring集成(/Dsl)中工作的一种方法

使用DestinationResolver在Spring集成(/Dsl)中工作的一种方法,spring,spring-integration,spring-integration-dsl,Spring,Spring Integration,Spring Integration Dsl,我是否可以配置单个JmsMessageDrivenChannelAdapter,以便它能够通过DestinationResolver或类似工具与不同的目标协同工作?我希望通过集成流生成器提供目标逻辑,这样我就可以重用组件(我不需要为每个主题创建一个适配器),或者将所有目标源/决策规则集中在一个类中。您可以这样做: IntegrationFlows .from(Jms.messageDrivenChannelAdapter(jmsConnectionFactory(

我是否可以配置单个
JmsMessageDrivenChannelAdapter
,以便它能够通过
DestinationResolver
或类似工具与不同的目标协同工作?我希望通过集成流生成器提供目标逻辑,这样我就可以重用组件(我不需要为每个主题创建一个适配器),或者将所有目标源/决策规则集中在一个类中。您可以这样做:

IntegrationFlows
                .from(Jms.messageDrivenChannelAdapter(jmsConnectionFactory())
                        .destination("DUMMY")
                        .configureListenerContainer(c ->
                                c.destinationResolver((session, s, b) ->
                                    YOUR LOGIC FOR DYNAMIC DESTINATION RESOLUTION)))
您需要
“DUMMY”
目标配置来模拟容器状态:

protected void validateConfiguration() {
    if (this.destination == null) {
        throw new IllegalArgumentException("Property 'destination' or 'destinationName' is required");
    }
}
OTOH我不确定它是否能正常工作

容器基于目标启动JMS
使用者
(即使您通过自定义
DestinationResolver
)并且在容器停止之前无法更改

可以考虑使用<代码> jMS.InEnguleAdvulter()/<代码>,这是可移植的,但是基于<代码> JMSTEMePo.Access选项卡()<代码>。这样,您就可以在轮询器的每个

receive()
调用上更改目标


无论如何,您都需要
dummy
destinationName配置。否则它不会转到
getDestinationResolver()

我通过执行您的代码意识到,destinationResolver在另一个方向工作,因此给定一个名称它会返回目标,我需要的是能够为适配器指定多个主题,因此,从给定的目的地,它会返回一个名称或一些东西来区分子流……正如您通过
ListenerContainer
设计看到的那样,这是不可能的。您只能在其中配置一个目的地。