Spring 集成中的动态路由
Dynamic routing in 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 pattern。
您真正需要的是一个具有运行时评估和适当通道(或其名称)的普通路由器 return。
请指出让您感到困惑的文档,我们会尽力改进它。
我想使用 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 pattern。
您真正需要的是一个具有运行时评估和适当通道(或其名称)的普通路由器 return。
请指出让您感到困惑的文档,我们会尽力改进它。