通過定時器每隔半小時監控一次。防止隊列卡住。
說明:
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()