我正在使用Apache Camel,并尝试创建工作流中每条消息处理历史记录的日志。
对于简单的直通工作流,消息进入,通过几个步骤处理,然后离开,这可能就像保持交换的顺序日志一样简单。我可以通过编写一个自定义TraceEventHandler来实现这一点,该调用在每个交换中调用,并允许我进行日志记录。
但是,如果涉及分割器,我不知道如何计算任何给定交换的出处。我可以维护自己的交换记录,但是对于拆分器,并非以前的所有活动都不是当前交换的祖先。也就是说,如果传入的消息被分成part1和part2,然后分别进行处理,我不想在计算part2的历史时考虑part1的处理。
TraceEventHandler有这个方法:
@Override
public void traceExchange(ProcessorDefinition<?> node, Processor target,
TraceInterceptor traceInterceptor,Exchange exchange) throws Exception {
}
我希望有一个像Exchange getPreviousExchange()
这样的Exchange方法可以在traceExchange中调用,但我找不到这样的东西。
有什么建议吗?如果有更好的方法,我不会使用自定义TraceEventHandler。
感谢。
答案 0 :(得分:2)
您可以通过使用密钥“CamelCorrelationId”查找exchange属性来查找以前的Exchange ID。
答案 1 :(得分:1)
如果要将后拆分处理作为单独的分支进行跟踪,则需要考虑Camel属性“CamelSplitIndex”。此属性将指示您正在处理的拆分的哪个迭代以及与William建议的CamelCorrelationId结合使用时,将提供完整的图片。