如何关联 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。所以你可以寻找 属性 看看它是否存在。如果不是,那么它是父交易所。
我有一个场景,我使用 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。所以你可以寻找 属性 看看它是否存在。如果不是,那么它是父交易所。