使用Python实现清除RabbitMQ里面1小时没有数据的连接推荐

公司RabbitMQ消费者重新连接后旧连接不会断开,会一直存在于服务端,至于是什么原因目前还没有找到。这样导致连接数每过一段时间就增加很多,所以写了一个Python脚本来删除无效的连接,根据每个连接里面的数据传输来定义是否是有效,如果1小时都没有数据传输那么就是无效,具体实现代码如下:

#!/usr/bin/python#coding:utf8删除RabbitMQ所有在1小时内没有数据的连接fromoptparseimportOptionParserimportsysimportjsonimporturllib2importrequests#使用选项帮助信息可以使用中文reload(sys)sys.setdefaultencoding("utf-8")usage=sys.argv[0]+" Options "parser=OptionParser(usage)parser.add_option("-v",dest="vhost",action="store",default=False,help="Selectvhost,DefaulteAll")options,args=parser.parse_args()def__init__(self,user='guest',passwd='guest',server_ip='192.168.1.31'):self.user=userself.password=passwdself.server_ip=server_ipifnotoptions.vhost:connections=requests.get("http://{0}:15672/api/connections".format(self.server_ip),auth=(self.user,self.password))else:connections=requests.get("http://{0}:15672/api/vhosts/{1}/connections".format(self.server_ip,options.vhost),auth=(self.user,self.password))connections=connections.json()returnconnectionsforiindata:send_ip=i.split("- ")[0].split(":")[0]send_port=i.split("- ")[0].split(":")[1].strip()Receive_ip=i.split("- ")[1].split(":")[0].strip()url='http://{0}:15672/api/connections/{1}%3A{2}%20-%3E%20{3}%3A5672?data_rates_age=3600 data_rates_incr=60'.format(self.server_ip,send_ip,send_port,Receive_ip)url_list.append(url)returnurl_listifself.server_ip=="10.8.5.3":authorization="BasicZ3Vlc3Q6UmRuN3lsV2FmZWs2Sjk4aA=="else:authorization="BasicZ3Vlc3Q6Z3Vlc3Q="user_agent="Mozilla/5.0(WindowsNT6.1;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/59.0.3071.115Safari/537.36"list1=[]foriindata:url=irequest=urllib2.Request(i,headers={"User-Agent":user_agent,"Authorization":authorization})req=urllib2.urlopen(request)list1.append(json.loads(req.read()))returnlist1"""获取每个连接的recv_oct_details和send_oct_details,根据1小时平均,如果无数据传输则为无效连接,生成删除API并删除"""data=self.getAllData()foriindata:n=2recv_avg_rate=i.get("recv_oct_details").get("avg_rate")n+=recv_avg_ratesend_avg_rate=i.get("send_oct_details").get("avg_rate")n+=send_avg_rateifn==2:name=i.get("name")send_ip=name.split("- ")[0].split(":")[0]send_port=name.split("- ")[0].split(":")[1].strip()Receive_ip=name.split("- ")[1].split(":")[0].strip()api='http://{0}:15672/api/connections/{1}:{2}%20-%3E%20{3}:5672'.format(self.server_ip,send_ip,send_port,Receive_ip)code=requests.delete(i,auth=(self.user,self.passwd))ifcode.status_code==204:print("{0}删除成功".format(send_port))else:print("{0}删除失败".format(send_port))sys.exit(1)print("done...")在前进的路上,主动搬开别人脚下的绊脚石,有时往往也是为自己铺路。

使用Python实现清除RabbitMQ里面1小时没有数据的连接推荐

相关文章:

你感兴趣的文章:

标签云: