Activemq是每一位运维工作人员必须掌握的一款软件,他是公司运行的命脉之一,既然如此重要,那么它的看门狗也是比较含金量的。Activemq的看门狗不是像那种# ps -ef|grep mq看进程或者#netstat -ntpl|grep 61613这样直白,因为Activemq还有一种假死情况,那就是“进程和端口都在,但是队列已经死掉了”,遇到这种情况就必须重启当前的activemq。
那么要写出这样的一个脚本,需要满足以下条件:
1)因为mq是集群,有主备之分,首先我们先在主mq上判断当前机器61613端口是否监听;
2)如果当前机器61613端口正常,往mq里添加信息,如果信息可以成功添加到对应的队列里,那么可以证明mq是正常的;
3)如果信息无法添加,那么监听备用mq的61613端口是否监听;
4)如果备用mq的61613端口不在,则发送邮件报警并同时重启主备mq进程;
5)如果备用mq的61613端口正常,则测试备用mq的信息队列是否正常;
6)如果备用mq的信息队列不正常,一样发送邮件报警并同时重启主备mq进程;
以上就是我们mq看门狗脚本的逻辑思路,这里我们用python语言来写,为什么要用python,因为python有一个stomp模块,这个模块是镇服activemq失灵的不二法宝!
首先这个stomp是需要我们手动安装的,他的下载地址是https://github.com/jasonrbriggs/stomp.py,选择"clone or download",然后把整个压缩文件传递到linux服务器里,解压缩之后,在stomp文件夹里使用# python setup.py install,然后就看见如下文字可以证明stomp已经安装成功了:
然后我们来写一个简单的测试队列的脚本,脚本内容如下:
[[email protected] ~]# cat mqtest.py import time import sys import stomp class MyListener(object): def on_error(self, headers, message): print(‘received an error %s‘ % message) def on_message(self, headers, message): print(‘received a message %s‘ % message) conn = stomp.Connection([(‘mq的内网ip地址‘,61613)]) conn.set_listener(‘‘, MyListener()) conn.start() conn.connect(‘mq的账号‘,‘mq的密码‘) conn.subscribe(destination=‘/queue/chenshuo‘, id=1, ack=‘auto‘) conn.send(body=‘hello,this is my test message!‘, destination=‘/queue/chenshuo‘) time.sleep(2) conn.disconnect()
在这个脚本里,我们把mq的内网地址作为连接地址,因为这样做很安全,其次我们建立一个叫“chenshuo”的队列,这个队列里传输一个消息,消息的内容就是
hello,this is my test message!
启动一下这个脚本,我们看一下linux端的效果。
再看一下web界面:
可见已经生成了chenshuo这个队列,而且入列和出列的消息数是3个(因为我之前传递了两个做实验),上面这个脚本是成功的。
但是这个脚本只是一个草样,因为这个消息是没有“消费者”的,没有消费者的话,那么这三个消息就会堆积,而他们的命运要不被删除掉要么就是等待消费者出现把他们消费掉。
(未完待续)