如何关联 Camel ExchangeCompletedEvent 和 multicast/split?

How to correlate Camel ExchangeCompletedEvent and multicast/split?

我有一个场景,我使用 ExchangeCompleteEvent 打印一些日志。

我的路由中有如下多播:-

from("{{route.from}}")
.multicast()
.to("{{route.to1}}")
.to("{{route.to2}}");

在这种情况下,ExchangeCompleteEvent 被调用了 3 次。我认为两个用于上述两个 .to 调用,一个用于主要交换。

我只想将它用于主要交换,即最后一次调用,如何将 ExchangeCompleteEvent 与主要交换相关联?

一个解决方案可能是标记(使用 Camel header 或 属性)多播副本,而不是主消息。然后你可以测试这样的 header/property 的存在来知道完成的交换是否是主交换。 “onPrepareRef”应该有助于分配标签。

from("{{route.from}}")
.multicast()
.onPrepare( exchange -> exchange.getIn().setHeader("isChild", "Y") )
.to("{{route.to1}}")
.to("{{route.to2}}");

子交易所将存储一个交易所 属性(键是字段 Exchange.CORRELATION_ID,例如 CamelCorrelationId),它指向它们的父交易所 ID。所以你可以寻找 属性 看看它是否存在。如果不是,那么它是父交易所。