如何从流程外部监控 Camel 传输中的消息

Sti*_*tig 3 java logging state-machine apache-camel

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

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

rau*_*ulk 5

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

  1. 抓住InflightRepository贯穿CamelContext#getInflightRepository()。您可以使用其browse()方法来获取Collection正在进行的交换,这使您可以访问交换 ID 及其Exchange本身。

  2. 正如您所说,使用EventNotifiers来保留状态机。您EventNotifier可以获得诸如交换创建交换完成交换发送等事件的回调。

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

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


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