python操作rabbitmq的consumer,并强制关闭特定consumer的连接

引入

python获取指定队列的consumer

python可以使用rabbitmq_management的api获取所有consumer的信息。【队列需要安装rabbitmq_management,在大部分情况下,我们安装队列的同时,都会安装管理界面,以方便一些简单的手动操作与简单监控】

获取consumer详情

以下代码就可以输出指定队列的consumer详情

python 复制代码
import requests
from requests.auth import HTTPBasicAuth

rabbitmq_host = '10.139.1.124'
# RabbitMQ管理API的URL
url = f'http://{rabbitmq_host}:15672/api/consumers'

# RabbitMQ的用户名和密码
username = 'guest'
password = 'guest'

response = requests.get(url, auth=HTTPBasicAuth(username, password))

# 检查请求是否成功
if response.status_code == 200:
    consumers = response.json()
    for consumer in consumers:
        print(consumer)

**f'http://{rabbitmq_host}:15672/api/consumers'**这个api是我们常用与consumer操作的接口

运行这个代码之后,一般会输出多行的consumer信息,每条信息如下:

python 复制代码
{'arguments': {}, 'ack_required': True, 'active': True, 'activity_status': 'up', 'channel_details': {'connection_name': '10.139.1.124:60440 -> 172.17.0.4:5672', 'name': '10.139.1.124:60440 -> 172.17.0.4:5672 (1)', 'node': 'rabbit@31ae4d091d79', 'number': 1, 'peer_host': '10.139.1.124', 'peer_port': 60440, 'user': 'guest'}, 'consumer_tag': 'ctag1.c48bbeb0d7d241519fd54553bc73c1b8', 'exclusive': False, 'prefetch_count': 1, 'queue': {'name': 'amap_work_error', 'vhost': '/'}}

这些信息包含了消费者的状态,消费者id,消费的队列信息,确认消费信息等。详细的字段解释如下:

consumer详情字段解释

python 复制代码
{
    'arguments': {},  # 消费者的额外参数
    'ack_required': True,  # 是否需要确认消息
    'active': True,  # 消费者是否活跃
    'activity_status': 'up',  # 消费者的活动状态
    'channel_details': {  # 消费者的通道详情
        'connection_name': '10.139.1.124:60440 -> 172.17.0.4:5672',  # 连接名称
        'name': '10.139.1.124:60440 -> 172.17.0.4:5672 (1)',  # 通道名称
        'node': 'rabbit@31ae4d091d79',  # RabbitMQ节点名称
        'number': 1,  # 通道编号
        'peer_host': '10.139.1.124',  # 连接的主机
        'peer_port': 60440,  # 连接的端口
        'user': 'guest'  # 用户名
    },
    'consumer_tag': 'ctag1.c48bbeb0d7d241519fd54553bc73c1b8',  # 消费者标签
    'exclusive': False,  # 消费者是否为独占
    'prefetch_count': 1,  # 预取消息数量
    'queue': {
        'name': 'amap_work_error',  # 队列名称
        'vhost': '/'  # 虚拟主机
    }
}

这也我们只需要对consumer信息内略加过滤就可以满足自己的大部分需求

强制关闭consumer【通过关闭rabbitmq的通道实现】

sql 复制代码
cookies = {
    '_ga': 'GA1.1.1271813516.1712559218',
    '_ga_4NJG4BH26D': 'GS1.1.1713228409.2.0.1713228409.0.0.0',
    'Hm_lvt_bd78bc908e66174e7dde385bf37cb4c1': '1714963778,1715568623,1715824211,1716187398',
    'Hm_lpvt_bd78bc908e66174e7dde385bf37cb4c1': '1716519695',
    'm': '2258:Z3Vlc3Q6Z3Vlc3Q%253D',
}

headers = {
    'Accept': '*/*',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8',
    'Cache-Control': 'no-cache',
    'Origin': 'http://10.139.1.132:15672',
    'Pragma': 'no-cache',
    'Proxy-Connection': 'keep-alive',
    'Referer': 'http://10.139.1.132:15672/',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36',
    'X-Reason': 'Closed via management plugin',
    'authorization': 'Basic Z3Vlc3Q6Z3Vlc3Q=',
    'content-type': 'application/json',
}

source = "10.139.1.127:53199 -> 172.17.0.3:5672"
encoded_url = quote(source, safe='')

close_demo_url = f'http://10.139.1.132:15672/api/connections/{encoded_url}'
print(close_demo_url)
json_data = {
    "name": "10.139.1.127:53199 -> 172.17.0.3:5672",
    "reason": "Closed via management plugin"
}
response = requests.delete(url,
                           cookies=cookies,
                           headers=headers,
                           json=json_data,
                           verify=False, auth=HTTPBasicAuth(username, password))
print(response.status_code)

无法关闭

暂时只能使用管理页面的close关闭或consumer内channel.close方法关闭

相关推荐
K2I-20 分钟前
UCI中Steel Plates Faults不平衡数据集处理
python
蓑笠翁00120 分钟前
Django REST Framework 全面指南:从模型到完整API接口开发
后端·python·django
感谢地心引力1 小时前
【Python】基于 PyQt6 和 Conda 的 PyInstaller 打包工具
数据库·python·conda·pyqt·pyinstaller
xiaohanbao092 小时前
Transformer架构与NLP词表示演进
python·深度学习·神经网络
love530love3 小时前
【笔记】 Podman Desktop 中部署 Stable Diffusion WebUI (GPU 支持)
人工智能·windows·笔记·python·容器·stable diffusion·podman
程序员晚枫3 小时前
Python 3.14正式发布!这5大新特性太炸裂了
python
先做个垃圾出来………4 小时前
SortedList
python
这里有鱼汤4 小时前
从DeepSeek到Kronos,3个原因告诉你:Kronos如何颠覆传统量化预测
后端·python·aigc
晓宜4 小时前
Java25 新特性介绍
java·python·算法
深栈4 小时前
机器学习:决策树
人工智能·python·决策树·机器学习·sklearn