Java 如何监控来自流程外部的Camel飞行中消息

Java 如何监控来自流程外部的Camel飞行中消息,java,logging,apache-camel,state-machine,Java,Logging,Apache Camel,State Machine,我有几个进程,运行几分钟或更长时间,由一个终端用户启动,他想知道他的订单是如何完成的。 在给定消息/交换ID的情况下,询问Apache Camel飞行中的状态的推荐方法是什么 作为一名开发人员,查看日志就足够了,但是由于日志无法显示给最终用户,是否有一个好的替代方案来构建一个由过程中的步骤主动提供的状态机来获取消息状态?我可以想出两种方法来实现这一点: 通过CamelContext#getInflightRepository()获取信息。您可以使用其方法获取机上交换机的集合,该集合允许您访问Ex

我有几个进程,运行几分钟或更长时间,由一个终端用户启动,他想知道他的订单是如何完成的。 在给定消息/交换ID的情况下,询问Apache Camel飞行中的状态的推荐方法是什么


作为一名开发人员,查看日志就足够了,但是由于日志无法显示给最终用户,是否有一个好的替代方案来构建一个由过程中的步骤主动提供的状态机来获取消息状态?

我可以想出两种方法来实现这一点:

  • 通过
    CamelContext#getInflightRepository()
    获取信息。您可以使用其方法获取机上交换机的
    集合
    ,该集合允许您访问Exchange ID和
    交换机
    本身

  • 就像你说的,保留一台状态机。您可以获得对事件的回调,如已创建的exchange已完成的exchange已发送的exchange

    您可以将这些事件写入数据库,例如像或这样的嵌入式事件,或者将状态保存在内存中

  • 我建议使用方法2,因为方法1的计算量更大,速度也更慢,因为您必须搜索并过滤整个存储库,直到找到您感兴趣的exchange



    注意:显然,这些解决方案在与Camel相同的JVM中工作。如果您想将此数据公开给另一个系统,您必须将解决方案包装在服务中。

    感谢这两种相关的选择—考虑使用#1查找孤立消息,使用eligble进行terniation,使用#2在处理期间和处理后很长时间内获取历史记录