Spring Integration中的动态路由



我想使用togglz来决定我的流的路由

我的集成流程中有FeatureManager:

@Autowired
private FeatureManager manager

和后面的

return IntegrationFlows
.from("incoming-flow")
.routeToRecipients(route -> {
if (manager.isActive(MyFeatures.A_B_TESTING)) {
route.recipient(A_CHANNEL);
} else {
route.recipient(DEFAULT_CHANNEL);
}
})

不幸的是,这不起作用,因为路由是在bean创建时决定的,这意味着要使其工作,我必须在每次更改切换开关时重新启动应用程序。这违背了切换的目的。

我可以想到通过创建过滤器和其他流来做到这一点的方法,但是有任何方法可以做到这一点吗?我发现了一些Spring的文档,但它似乎没有用,而且它是用xml编写的,我不使用。

你所做的真的不是为了运行时的决定。recipient()是将一个映射添加到接收列表路由器。您可能需要的是在运行时决定将当前消息路由到哪里。出于这个目的,我建议研究一个普通的route()及其功能支持:

.route(p -> manager.isActive(MyFeatures.A_B_TESTING) ? A_CHANNEL : DEFAULT_CHANNEL)

其它用例的收件人列表路由器是当我们需要决定将消息发送给多个映射渠道根据他们的选择器。嗯,这也可以用普通的路由器来完成,但是这里有一个更正式的接受者列表路由器EI模式,我们在这里遵循。

你真正需要的是一个具有运行时评估和适当通道(或其名称)返回的普通路由器。

请指出文件中让你困惑的地方,我们将尽力改进。

最新更新