Monitor ActiveMQ Queue and Topic Status

在最近的工作中,公司平台部门人员使用的JMS(Java Message Service)服务中经常出现拥塞的情况,项目的后台需要一个综合的监控程序实时监控ActiveMQ的服务状态,我这边实现了部分监控功能,在这边做一下工作的总结。

第一次尝试:ActiveMQ-CPP (Failed)

我一开始查询了很多资料,看到Apache ActiveMQ的官网有提到过ActiveMQ-CPP 这个项目,但是无奈现在的C++能力有点偏弱,加之Doxygen的文档看到想吐,就换了其他方案。改用调用ActiveMQ Web ConsoleXML 返回结果来提取我所需要的信息。

第二次尝试:Golang 调用Web Console

提取信息的过程非常成功,按照默认配置安装ActiveMQWeb admin 入口为 http://localhost:8161/admin 进入这个管理页面会有一层Basic Authentication,也就是需要在请求的Header里面加入{“Authorization”: ‘Basic *’} 注: “*” 代表 base64Encode(username + ‘:’ + password) 相信大家应该能够理解。我的设想是因为Go语言是可以将源代码编译成动态链接库的,编译的方式类似: go build -o gohttp.so -buildmode=c-shared gohttp.goCGO生成动态链接库和头文件是有前提的,必须要引入 C import "C"而且有个比较恶心的就是需要使用C中对应的类型所以后期维护起来还是很麻烦,且对于我们公司的代码管理不方便(公司的后端代码基本全是C++)。

第三次尝试:Restclient-CPP 成功

RestClient-CPP是基于libcurl二次封装的一个C++ HTTP库,使用起来很方便,项目可以在Github上找到。实现的主要思路就是登陆ActiveMQ Web Console 然后Queue Topic 对应信息的XML结果再用Qt的库对XML进行解析提取所需字段即可,具体参考代码如下:https://github.com/cyber-prog0x/CSnippets/blob/master/activemq_monitor.cpp