如何在不弄乱 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
或完全省略参数。
我有如下内容:
.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
或完全省略参数。