如何从进程外部监视 Camel 动态消息



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

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

我可以想到两种实现此目的的方法:

  1. 通过CamelContext#getInflightRepository()掌握InflightRepository。您可以使用其browse()方法获取机上交换Collection,从而可以访问Exchange ID和Exchange本身。

  2. 如您所说,使用 EventNotifier s 来保留状态机。您的EventNotifier可以获取事件的回调,例如创建的交易所交易所完成交易所已发送等。

    您可以将这些事件写入数据库,例如通过其 JNI 绑定将 LevelDB 或 Sophia 等嵌入式事件写入数据库,或者将状态保存在内存中。

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

<小时 />

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

最新更新