使用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
设计看到的那样,这是不可能的。您只能在其中配置一个目的地。