我有一个使用ExchangeCompleteEvent打印一些日志的方案。
我的路由中存在多播,如下所示:-
from("{{route.from}}")
.multicast()
.to("{{route.to1}}")
.to("{{route.to2}}");
在这种情况下,ExchangeCompleteEvent被调用3次。我认为有两个用于以上两个.to呼叫,一个用于主交换。
我只想将其用于主交换,即最后一次呼叫,如何将ExchangeCompleteEvent与主交换相关联?
答案 0 :(得分:0)
一种解决方案是标记(使用Camel标头或属性)多播副本,而不是主消息。然后,您可以测试此类标头/属性的存在,以了解完成的交换是否是主交换。
“ onPrepareRef
”应有助于分配标签。
from("{{route.from}}")
.multicast()
.onPrepare( exchange -> exchange.getIn().setHeader("isChild", "Y") )
.to("{{route.to1}}")
.to("{{route.to2}}");
答案 1 :(得分:0)
子交换将存储一个交换属性(键是字段Exchange.CORRELATION_ID
,例如CamelCorrelationId
),该属性指向其父交换ID。因此,您可以查找该属性以查看其是否存在。如果不是,则为其父交换。