如何监控来自流程外部的Camel正在进行的消息

时间:2016-01-25 09:27:50

标签: java logging apache-camel state-machine

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

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

1 个答案:

答案 0 :(得分:4)

我可以想到实现这个目标的两种方法:

  1. 抓住InflightRepositoryCamelContext#getInflightRepository()。您可以使用其browse()方法获取Collection个机上交换,这样您就可以访问Exchange ID和Exchange本身。

  2. 正如你所说,
  3. Use EventNotifiers保留状态机。您的EventNotifier可以针对创建交换交换已完成已发送交换等事件进行回调。

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

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

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