如何从流程外部监控 Camel 飞行中的消息

How to monitor Camel in-flight messages from outside of the process

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

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

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

  1. 获取 InflightRepository through CamelContext#getInflightRepository(). You can use its browse() 方法以获取 Collection 机上交换,这使您可以访问交换 ID 和 Exchange 本身。

  2. Use EventNotifiers to keep a state machine, as you said. Your EventNotifier 可以获得诸如 exchange createdexchange completed、[=32 等事件的回调=]交换发送,等等

    您可以将这些事件写入数据库,例如像 LevelDB or Sophia via its JNI bindings 这样的嵌入式,或者将状态保存在内存中。

我会建议方法 2,因为方法 1 更多 computation-intensive 并且速度较慢,因为您必须搜索和过滤整个存储库,直到找到您感兴趣的交换。


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