我有一个暴露Rest网关的Spring Integration Flow Project,在收到Rest POST请求后,它会做一些次要逻辑。根据一些Payload参数,我想动态激活另一个Spring Integration流,并将消息路由到该流中的指定通道,我可以根据Payload在主流中发现该通道。 Sub流程将响应消息放入主流中定义的指定通道中。
我怎样才能做到这一点。
答案 0 :(得分:2)
从版本1.2
开始Spring Integration Java DSL为运行时流registration提供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,您甚至可以构建一些缓存,不要多次注册相同的流,但只需在首次注册后重复使用。
答案 1 :(得分:0)
请参阅使用自定义路由器的dynamic ftp example来实例化子流并路由到新流的频道。
另请参阅my answer to this question及其follow up了解类似的机制,这次使用java配置进行入站邮件适配器。