通过定时器每隔半小时监控一次。防止队列卡住。
说明:
vhost = '%2F'
当你的vhost是 / 的时候 浏览器要通过 转义
所以 / = %2F
#encoding: utf-8
#summary: 获取 RabbitMQ 中3种状态消息的数量
import os, sys, time
import requests
import json
import smtplib
import time
from email.mime.text import MIMEText
from email.header import Header
class RabbitMQTool(object):
def __init__(self, host, vhost, user, passwd):
self.host = host
self.vhost = vhost
self.user = user
self.passwd = passwd
# 返回3种消息数量:ready, unacked, total
def getMessageCount(self):
now = time.strftime("%Y-%m-%d %H:%M:%S")
print('Start time:%d',now)
url = 'http://%s:15672/api/queues/%s' % (self.host, self.vhost)
r = requests.get(url, auth=(self.user, self.passwd))
print(r)
if r.status_code != 200:
return -1
dic = json.loads(r.text)
for item in dic:
ready, unacked, total ,name= item['messages_ready'], item['messages_unacknowledged'], item['messages'], item['name']
if ready >0 or unacked >0 or total >0:
msg = """
ready:%d
unacked:%d
total:%d
queryName:%s
time:%s
"""%(ready,unacked,total,name,now)
sentMail(msg)
print('ready: %d' % ready)
print('unacked: %d' % unacked)
print('total: %d' % total)
#return dic['messages_ready'], dic['messages_unacknowledged'], dic['messages']
now = time.strftime("%Y-%m-%d %H:%M:%S")
print('End time:%d',now)
def sentMail(content):
try:
sender_qq_mail = '发件人邮邮'
#收件人邮箱
receiver = ['收件人1','收件人2']
smtp = smtplib.SMTP()
msg = MIMEText(content, "plain", 'utf-8')
msg["Subject"] = Header("队列堵塞提醒", 'utf-8')
msg["From"] = "系统管理员"
msg["To"] = ','.join(receiver)
smtp.connect('smtp.exmail.qq.com')
print(msg)
smtp.login(sender_qq_mail, '你的密码')
smtp.sendmail(sender_qq_mail,receiver,msg.as_string())
smtp.quit()
except Exception as e:
print(e)
if __name__ == '__main__':
mqTool = RabbitMQTool(host = '列表ip',
vhost = '%2F',
user = '登录名',
passwd = '密码')
mqTool.getMessageCount()