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