如何在不弄乱 body 的情况下顺序调用多个路由

How to call multiple routes sequentially without messing with body

我有如下内容:

.from("direct:start")
    .to("direct:a")
    .to("direct:b")
    .to("direct:c");

我遇到的问题是 direct:a 修改了 body,然后将修改后的 body 传递给 b 和 c。我希望 a、b 和 c 都得到相同的 body。我能够通过 .multicast():

实现这一目标
.from("direct:start")
    .multicast()
    .to("direct:a",
        "direct:b",
        "direct:c");

但是,.to(...) 块似乎不再按顺序执行(即使我没有指定 .parallelProcessing()),而且多播也打乱了我的 tx 策略。我找不到完全适合这种需要的任何东西。我认为 wireTap 可以实现这一点,但这是异步的,我需要同步和顺序。我什至尝试过蛮力将 body 保存到 属性 以防止交换然后恢复它,但这似乎不起作用。


你应该使用 Wire Tap:

from("direct:start")
    .wireTap("direct:a")
    .wireTap("direct:b")
    .wireTap("direct:c");

您可以使用 enrich 这样做:

from("direct:start")
    .enrich("direct:a", AggregationStrategies.useOriginal(true))
    .enrich("direct:b", AggregationStrategies.useOriginal(true))
    .enrich("direct:c", AggregationStrategies.useOriginal(true));

那里的 true 参数意味着您的子路由抛出的异常将传播到主路由。如果你不想这样,只需传递 false 或完全省略参数。