gpt4 book ai didi

java - EIP路由器使用后无需引入新 channel

转载 作者:行者123 更新时间:2023-11-30 07:25:56 24 4
gpt4 key购买 nike

在这种情况下,在 Spring Integration 中使用路由器后是否可以不创建新 channel :

  1. 使用某种类型的路由器(例如HeaderValueRouter)
  2. 在1的基础上做一些不同的事情(例如,如果消息头有一个值为A的参数,则执行actionA,如果参数值为B,则执行actionB等)
  3. 做接下来的常见事情

这里的步骤 1-2 实际上并没有定义不同的执行路径,而只是临时分支。

目前,我必须使用新的直接输入 channel 将 3 个和其他集成步骤提取到单独的流定义中,并在第 2 步中使用此 channel 名称。该解决方案看起来很人为且麻烦。

我可以不这样做吗?

最佳答案

首先让我们看一下它是一个EIP component :

a Message Router, which consumes a Message from one Message Channel and republishes it to a different Message Channel channel depending on a set of conditions.

从另一边来看,为了达到最佳的松散耦合和更好的模块化,路由器对下行流一无所知——只知道其到路由器的输入 channel 。

如果您想要一些简单的 if...else 逻辑,但不涉及逻辑中的消息传递,您可以在某些 POJO 方法中并使用 .handle() 您将能够达到所需的行为。

路由器只能路由,仅此而已!

从另一方面来说,为了让 DSL 有点用处,我们引入了 subflow 表示法,您可以使用 subFlowMapping 映射路由逻辑。 :

    @Bean
public IntegrationFlow routerTwoSubFlows() {
return f -> f
.split()
.<Integer, Boolean>route(p -> p % 2 == 0, m -> m
.subFlowMapping("true", sf -> sf.<Integer>handle((p, h) -> p * 2))
.subFlowMapping("false", sf -> sf.<Integer>handle((p, h) -> p * 3)))
.aggregate()
.channel(c -> c.queue("routerTwoSubFlowsOutput"));
}

The .channelMapping() continues to work as in regular Router mapping, but the .subFlowMapping() tied that subflow with main flow. In other words, any router's subflow returns to the main flow after .route().

关于java - EIP路由器使用后无需引入新 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36812276/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com