Activemq判断队列存活脚本

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个(因为我之前传递了两个做实验),上面这个脚本是成功的。

但是这个脚本只是一个草样,因为这个消息是没有“消费者”的,没有消费者的话,那么这三个消息就会堆积,而他们的命运要不被删除掉要么就是等待消费者出现把他们消费掉。

(未完待续)

时间: 2024-10-19 03:18:25

Activemq判断队列存活脚本的相关文章

Activemq判断队列存活脚本(二)

#脚本用途:检测Activemq集群的端口监听情况及其队列通畅情况 #!/usr/bin/env python #coding=utf-8  import paramiko import time import sys import stomp Aip = ("第一台mq服务器") Bip = ("第二台mq服务器") Cip = ("第三台mq服务器") list = [] def Checknetstat():     for i in (A

JAVA的设计模式之观察者模式----结合ActiveMQ消息队列说明

1----------------------观察者模式------------------------------ 观察者模式:定义对象间一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知自动更新. activeMQ消息队列 ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮

使用Java编写ActiveMQ的队列模式和主题模式

队列模式的消息演示 本小节简单演示一下如何使用JMS接口规范连接ActiveMQ,首先创建一个Maven工程,在pom.xml文件中,添加activemq的依赖: <dependencies> <dependency> <groupId>org.apache.activemq</groupId> <artifactId>activemq-all</artifactId> <version>5.9.0</version

ping判断内网地址是否存活脚本

################################################### #该脚本可以根据实际情况修改: #!/bin/bash #editor tangbo #QQ:79313760 #2015-07-22 #先定义三个变量,使用for循环来把ping成功的打印到定义的目录 UPHOSTS=/var/log/uphosts.`date +%m%d%y`      定义ping成功目录 DOWNHOSTS=/var/log/downhosts.`date +%m%d

ActiveMQ消息队列的搭建

今天来写下消息队列 一.首先介绍下什么是activeMQ? ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线.ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位. 主要特点: 1. 多种语言和协议编写客户端.语言: Java, C, C++, C#, Ruby, Perl, Python, PHP.应用协议: OpenWire,Sto

2015年12月10日 spring初级知识讲解(三)Spring消息之activeMQ消息队列

基础 JMS消息 一.下载ActiveMQ并安装 地址:http://activemq.apache.org/ 最新版本:5.13.0 下载完后解压缩到本地硬盘中,解压目录中activemq-core-5.13.0.jar,这就是ActiveMQ提供给我们的API. 在bin目录中,找到用于启动ActiveMQ的脚本,运行脚本后ActiveMQ就准备好了,可以使用它进行消息代理. 访问http://127.0.0.1:8161/admin/能看到如下则表示安装成功了. 二.在Spring中搭建消

ActiveMQ消息队列的使用及应用

一:JMQ的两种消息模式 1.1:点对点的消息模式 1.2:订阅模式 二:点对点的实现代码 2.1:点对点的发送端 2.2:点对点的接收端 三:订阅/发布模式的实现代码 3.1:订阅模式的发送端 3.2:订阅模式的接收端 四:发送消息的数据类型 4.1:传递javabean对象 4.2:发送文件 五:ActiveMQ的应用 5.1:保证消息的成功处理 5.2:避免消息队列的并发 5.2.1:主动接收队列消息 5.2.2:使用多个接收端 5.3:消息有效期的管理 5.4:过期消息,处理失败的消息如

ActiveMQ消息队列介绍(转)

ActiveMQ是一个开源兼容Java Message Service (JMS) 1.1面向消息的中件间. 来自Apache Software Foundation. ActiveMQ提供松耦合的应用程序架构. 先来看两个应用通过RPC通讯的紧耦合: 通过面向消息的中件间, 架构演变为: 我们看到应用程序1发送message到中件间, 应用程序2从中件间接收message. ActiveMQ提供了灵活的应用程序架构. ActiveMQ消息存储也是FIFO: 什么时候使用ActiveMQ: 1.

检测局域网内主机存活脚本

我们在对局域网的网络情况进行维护时,经常需要收集网络中存活的IP,这时候我们可以写一个shell脚本,自动收集某一网段的IP.执行该脚本,在线IP绿色显示,离线IP红色显示:并分别写入到指定IP状态列表文件中. [[email protected] ~]# cd /usr/local/bin/ [[email protected] bin]# vim alive.sh #!/bin/bash NETWORK=$1 for HOST in $(seq 1 254) do ping -c1 -w1