一种在 Spring Integration (/dsl) 中使用目的地解析器工作的方法



我可以配置单个JmsMessageDrivenChannelAdapter,以便它能够通过DestinationResolvers等方式处理不同的目的地吗?我想通过IntegrationFlows生成器提供目标逻辑,以便我可以重用该组件(我不需要为每个主题创建一个适配器(,或者将所有目标源/决策规则集中在一个类中

你可以这样做:

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 无论如何,我不确定它是否会正常工作。

容器会根据目标启动 JMSConsumer(即使您通过自定义DestinationResolver提供它(,并且在容器停止之前无法更改它。

您可以考虑使用Jms.inboundAdapter(),这是可轮询的,但基于JmsTemplate.receiveSelected()。这样,您就可以在轮询器每次receive()调用时更改目标。

无论如何,您都需要dummy目的地名称配置。否则它不会进入getDestinationResolver().

相关内容

  • 没有找到相关文章

最新更新