骆驼路线的监控按预期工作

Monitoring if camel routes work as aspected

我正在寻找如何监控骆驼路线功能的最佳实践。 我知道有像 hawtio 和 camelwatch 这样的监控工具,但这并不是我要找的。

我想知道一条路由是否是"working"方面的,例如你有一条监听队列的路由(来自("jms..."))。也许队列中有消息,但由于某些数据库问题或其他原因(取决于 jms 提供程序),侦听器无法将它们出列。使用上面提到的监控工具,您只能看到 inflight/failed/completed 消息,但看不到侦听器是否能够获取消息 -> 因此路由不是 "working".

我知道还有 apache BAM,也许我需要做更多的研究,但不知何故,BAM 似乎创建了新路由,而您无法监控现有路由。我也不想为每条路线 implement/define 这样的业务案例,我寻找更通用的方式。在 camel 3.0 idea board 上也提到 BAM 已经 5 年没有被触及了,所以我认为人们不会经常使用它(这意味着对我来说它不完全符合他们的需求)。

前段时间我也有类似的需求,最后我开发了一个小的Camel监控应用。

它运行在计时器上,通过JMX/Jolokia查询安装在远程服务器上的不同Camel应用程序,如果我感兴趣的路由LastExchangeCompletedTimestamp早于某个时间间隔,则发送给管理员的邮件。

也许这种方法对于您的场景来说太简单了,但不失为一种选择。

(编辑:添加了更多详细信息)

要点:

主要路线查询数据库以查找要控制的实体并生成控制路线

控制路由在 quartz 和 http post 以下 url

上触发
.to("http://server:port/app/jolokia/?"+
"maxDepth=7&maxCollectionSize=500&ignoreErrors=true&canonicalNaming=false")

发送以下jsonRequest正文

LinkedHashMap<String,Object> request=new LinkedHashMap<String,Object>();
request.put("type","read");
request.put("mbean","org.apache.camel:"+entity.getRouteId());
jsonRequest=mapper.writeValueAsString(request);

作为响应你得到另一个 JSON,解析它并得到 LastExchangeCompletedTimestamp