Spring integration 动态实例化Spring集成流

Spring integration 动态实例化Spring集成流,spring-integration,Spring Integration,我有一个Spring集成流项目,它公开了一个Rest网关,在收到Rest POST请求后,它执行一些次要的逻辑。基于一些有效负载参数,我想动态激活另一个Spring集成流,并将消息路由到该流中的指定通道,我可以根据有效负载在主流中发现该通道。 子流将把响应消息放在主流中定义的指定通道中 我怎样才能做到这一点 请参阅,它使用自定义路由器实例化子流并路由到新流的通道 另请参阅及其,以了解类似的机制,这次使用java配置入站邮件适配器。从版本1.2开始,Spring Integration java

我有一个Spring集成流项目,它公开了一个Rest网关,在收到Rest POST请求后,它执行一些次要的逻辑。基于一些有效负载参数,我想动态激活另一个Spring集成流,并将消息路由到该流中的指定通道,我可以根据有效负载在主流中发现该通道。 子流将把响应消息放在主流中定义的指定通道中

我怎样才能做到这一点

请参阅,它使用自定义路由器实例化子流并路由到新流的通道


另请参阅及其,以了解类似的机制,这次使用java配置入站邮件适配器。

从版本
1.2开始,Spring Integration java DSL为运行时流提供了一个API:

@Autowired
私有集成流上下文;
...
集成流myFlow=f->f
.transform(字符串::toUpperCase)
.transform(“你好,”::concat);
字符串flowId=this.context.register(myFlow);
MessagingTemplate MessagingTemplate=this.context.messagingTemplateFor(flowId);
assertEquals(“你好,春天”,
messagingTemplate.convertSendAndReceive(“spring”,String.class));
this.context.remove(flowId);
因此,根据您的逻辑,您可以构建和执行一个或另一个流


围绕该API,您甚至可以构建一些缓存—不需要多次注册相同的流,只需在第一次注册后重新使用即可。

您的问题的范围非常广泛,在这里,堆栈溢出程序员可以在初始编程工作的基础上相互帮助。除此之外,我会说,去做吧!非常感谢Gary,为了防止它对其他人有帮助,它做到了完全注册您需要使用的流:this.context.registration(flow.register(),这是一种新的版本行为。我会改变答案,但不被接受。。。
@Autowired
private IntegrationFlowContext context;
...

IntegrationFlow myFlow = f -> f
            .<String, String>transform(String::toUpperCase)
            .transform("Hello, "::concat);

String flowId = this.context.register(myFlow);
MessagingTemplate messagingTemplate = this.context.messagingTemplateFor(flowId);

assertEquals("Hello, SPRING",
            messagingTemplate.convertSendAndReceive("spring", String.class));

this.context.remove(flowId);