Camel 如何顺序调用多个路由而不干扰身体

kyvafyod  于 2022-11-07  发布在  Apache
关注(0)|答案(2)|浏览(170)

我有类似下面的东西:

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

我遇到的问题是direct:a修改了主体,然后将修改后的主体传递给b和c。我希望a、b和c都得到相同的主体。我可以通过执行.multicast()来实现这一点:

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

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

ss2ws0br

ss2ws0br1#

您可以使用enrich执行以下操作:

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

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

xu3bshqb

xu3bshqb2#

您应该使用Wire Tap

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

相关问题