我有几个进程,运行几分钟或更长时间,由最终用户启动,他想知道他的订单是如何完成的。在给定消息/交换 ID 的情况下,询问 Apache Camel 飞行中处于什么状态的推荐方法是什么?
作为开发人员,查看日志就足够了,但由于日志无法显示给最终用户,是否有一个好的替代方法来构建状态机,由流程中的步骤主动提供,以获取消息状态?
我可以想到两种实现此目的的方法:
-
通过
CamelContext#getInflightRepository()
掌握InflightRepository
。您可以使用其browse()
方法获取机上交换Collection
,从而可以访问Exchange ID和Exchange
本身。 -
如您所说,使用
EventNotifier
s 来保留状态机。您的EventNotifier
可以获取事件的回调,例如创建的交易所、交易所完成、交易所已发送等。您可以将这些事件写入数据库,例如通过其 JNI 绑定将 LevelDB 或 Sophia 等嵌入式事件写入数据库,或者将状态保存在内存中。
我建议使用方法 2,因为方法 1 的计算量更大,速度更慢,因为您必须搜索和过滤整个存储库,直到找到您感兴趣的交易所。
<小时 />注意:显然,这些解决方案在与 Camel 相同的 JVM 中工作。如果要将此数据公开给另一个系统,则必须将解决方案包装在服务中。