You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Boto3列出Amazon MQ代理上运行的队列?

解决AmazonMQ通过Boto3获取运行队列的方法

核心说明

Boto3的AmazonMQ官方API确实没有提供直接列出代理队列的接口,因为队列属于代理内部的资源(比如ActiveMQ或RabbitMQ的原生资源)。要获取队列信息,需要结合Boto3获取代理的管理访问凭证和端点,再调用代理的原生管理API。

具体实现步骤

1. 用Boto3获取代理的管理信息

通过Boto3获取代理的管理端点、用户名(需确保IAM权限允许访问describe_broker接口):

import boto3
import requests
from requests.auth import HTTPBasicAuth

# 初始化Boto3客户端
mq_client = boto3.client('mq', region_name='ap-southeast-2')

# 获取代理详情
broker_name = 'mybroker'
response = mq_client.describe_broker(BrokerId=broker_name)

# 提取管理端点和用户名
management_endpoint = next(ep for ep in response['BrokerInstances'][0]['Endpoints'] if ep.startswith('https'))
username = response['Users'][0]['Username']
# 密码建议从Secrets Manager读取(若代理凭证存在此处),避免硬编码
password = 'your_broker_management_password'

2. 调用代理原生管理API获取队列

根据代理类型选择对应API:

针对ActiveMQ代理

# ActiveMQ 队列查询API路径
api_path = '/api/jolokia/read/org.apache.activemq:type=Broker,brokerName=*,destinationType=Queue,destinationName=*'

# 发送请求
response = requests.get(
    f"{management_endpoint}{api_path}",
    auth=HTTPBasicAuth(username, password),
    verify=False  # 生产环境建议配置信任证书,关闭此参数
)

# 解析队列名称
queues_data = response.json()
queue_names = [key.split(',destinationName=')[1].rstrip(']') for key in queues_data['value'].keys()]
print(queue_names)

针对RabbitMQ代理

# RabbitMQ 队列查询API路径(虚拟主机需URL编码)
vhost = '%2F'
api_path = f'/api/queues/{vhost}'

# 发送请求
response = requests.get(
    f"{management_endpoint}{api_path}",
    auth=HTTPBasicAuth(username, password),
    verify=False
)

# 解析队列名称
queues_data = response.json()
queue_names = [queue['name'] for queue in queues_data]
print(queue_names)

3. 程序化创建监控仪表盘

拿到队列名称后,可通过Boto3的CloudWatch客户端批量创建监控指标:

cloudwatch_client = boto3.client('cloudwatch', region_name='ap-southeast-2')

# 为每个队列生成监控配置
dashboard_widgets = []
for idx, queue in enumerate(queue_names):
    widget = {
        "type": "metric",
        "x": idx % 2 * 12,
        "y": idx // 2 * 6,
        "width": 12,
        "height": 6,
        "properties": {
            "metrics": [
                ["AWS/AmazonMQ", "MessageUnacknowledgedCount", "Broker", broker_name, "VirtualHost", "/", "Queue", queue]
            ],
            "period": 60,
            "stat": "Average",
            "region": "ap-southeast-2",
            "title": f"{queue} - 未确认消息数"
        }
    }
    dashboard_widgets.append(widget)

# 创建仪表盘(示例)
cloudwatch_client.put_dashboard(
    DashboardName='AmazonMQ_Queue_Monitoring',
    DashboardBody=f'{{"widgets": {dashboard_widgets}}}'
)

注意事项

  • 确保代理安全组开放管理端口(ActiveMQ默认8162,RabbitMQ默认15672)。
  • IAM角色需配置mq:DescribeBroker权限,若从Secrets Manager读密码,需添加secretsmanager:GetSecretValue权限。
  • 生产环境务必开启SSL证书验证,避免使用verify=False。

内容的提问来源于stack exchange,提问作者user45097

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 21:13:17