使用 DestinationResolvers 在 Spring 集成 (/Dsl) 中工作的方法
A way to work in Spring Integration (/Dsl) with DestinationResolvers
我可以配置一个 JmsMessageDrivenChannelAdapter
以便它能够通过 DestinationResolvers
等方式处理不同的目的地吗?我想通过 IntegrationFlows
构建器提供目标逻辑,这样我就可以重用该组件(我不需要为每个主题创建一个适配器),或者将所有目标 sources/decision 规则集中在一个单身class
你可以这样做:
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 Consumer
(即使您通过自定义 DestinationResolver
提供它)并且在容器停止之前无法更改。
不过您可以考虑使用 Jms.inboundAdapter()
,它是可轮询的,但基于 JmsTemplate.receiveSelected()
。这样您就可以在每次 receive()
轮询器调用时更改目标。
无论如何,您都需要 dummy
destinationName 配置。否则它不会转到 getDestinationResolver()
.
我可以配置一个 JmsMessageDrivenChannelAdapter
以便它能够通过 DestinationResolvers
等方式处理不同的目的地吗?我想通过 IntegrationFlows
构建器提供目标逻辑,这样我就可以重用该组件(我不需要为每个主题创建一个适配器),或者将所有目标 sources/decision 规则集中在一个单身class
你可以这样做:
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 Consumer
(即使您通过自定义 DestinationResolver
提供它)并且在容器停止之前无法更改。
不过您可以考虑使用 Jms.inboundAdapter()
,它是可轮询的,但基于 JmsTemplate.receiveSelected()
。这样您就可以在每次 receive()
轮询器调用时更改目标。
无论如何,您都需要 dummy
destinationName 配置。否则它不会转到 getDestinationResolver()
.