动态实例化Spring Integration流



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

我怎样才能做到这一点。

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

@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);

因此,根据您的逻辑,您可以构建和执行一个或另一个流。

围绕这个API,您甚至可以构建一些缓存。不多次注册同一个流,而是在第一次注册后重用。

请参阅动态ftp示例,该示例使用自定义路由器来实例化子流并路由到新流的通道。

另请参阅我对这个问题的回答,以及类似机制的后续操作,这次使用java配置来配置入站邮件适配器。

最新更新