如何关联骆驼ExchangeCompletedEvent和多播/拆分?

时间:2018-10-18 12:19:43

标签: apache-camel jbossfuse fuseesb

我有一个使用ExchangeCompleteEvent打印一些日志的方案。

我的路由中存在多播,如下所示:-

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

在这种情况下,ExchangeCompleteEvent被调用3次。我认为有两个用于以上两个.to呼叫,一个用于主交换。

我只想将其用于主交换,即最后一次呼叫,如何将ExchangeCompleteEvent与主交换相关联?

2 个答案:

答案 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。因此,您可以查找该属性以查看其是否存在。如果不是,则为其父交换。