如何从流程外部监控 Camel 飞行中的消息
How to monitor Camel in-flight messages from outside of the process
我有几个进程,其中 运行 分钟或更长时间,由最终用户启动,他想知道他的订单是如何完成的。
在给定 message/exchange ID 的情况下,询问 Apache Camel 飞行状态的推荐方法是什么?
作为开发人员,查看日志就足够了,但是由于无法向最终用户显示日志,是否有一个很好的替代方法来构建状态机,由过程中的步骤主动提供, 获取消息状态?
我可以想到两种方法来实现这一点:
获取 InflightRepository
through CamelContext#getInflightRepository()
. You can use its browse()
方法以获取 Collection
机上交换,这使您可以访问交换 ID 和 Exchange
本身。
Use EventNotifier
s to keep a state machine, as you said. Your EventNotifier
可以获得诸如 exchange created、exchange completed、[=32 等事件的回调=]交换发送,等等
您可以将这些事件写入数据库,例如像 LevelDB or Sophia via its JNI bindings 这样的嵌入式,或者将状态保存在内存中。
我会建议方法 2,因为方法 1 更多 computation-intensive 并且速度较慢,因为您必须搜索和过滤整个存储库,直到找到您感兴趣的交换。
注意: 显然,这些解决方案与 Camel 在同一 JVM 中工作。如果您想将此数据公开给另一个系统,则必须将解决方案包装在服务中。
我有几个进程,其中 运行 分钟或更长时间,由最终用户启动,他想知道他的订单是如何完成的。 在给定 message/exchange ID 的情况下,询问 Apache Camel 飞行状态的推荐方法是什么?
作为开发人员,查看日志就足够了,但是由于无法向最终用户显示日志,是否有一个很好的替代方法来构建状态机,由过程中的步骤主动提供, 获取消息状态?
我可以想到两种方法来实现这一点:
获取
InflightRepository
throughCamelContext#getInflightRepository()
. You can use itsbrowse()
方法以获取Collection
机上交换,这使您可以访问交换 ID 和Exchange
本身。Use
EventNotifier
s to keep a state machine, as you said. YourEventNotifier
可以获得诸如 exchange created、exchange completed、[=32 等事件的回调=]交换发送,等等您可以将这些事件写入数据库,例如像 LevelDB or Sophia via its JNI bindings 这样的嵌入式,或者将状态保存在内存中。
我会建议方法 2,因为方法 1 更多 computation-intensive 并且速度较慢,因为您必须搜索和过滤整个存储库,直到找到您感兴趣的交换。
注意: 显然,这些解决方案与 Camel 在同一 JVM 中工作。如果您想将此数据公开给另一个系统,则必须将解决方案包装在服务中。