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

Python(Paho-MQTT)实时获取MQTT Broker状态问题求助

嘿,我来帮你捋捋这个问题!你遇到的订阅$SYS/broker/connection/#收不到消息,但订阅#能正常工作的情况,大概率是这几个原因导致的:

可能的原因及解决办法

1. Mosquitto Broker的$SYS主题订阅权限被限制

Mosquitto默认情况下可能会限制外部客户端订阅$SYS系统主题,尤其是当你启用了认证或者ACL规则时。你需要检查Broker的配置文件(通常是mosquitto.conf):

  • 确保开启了系统主题发布:添加或修改sys_publish true(默认可能是false或被注释)
  • 如果使用了ACL(访问控制列表),需要添加允许订阅$SYS主题的规则:
    • 若允许匿名用户订阅,添加:pattern read $SYS/#
    • 若针对特定用户,添加:
      user your_username
      topic read $SYS/#
      

修改完配置后,记得重启Mosquitto服务让配置生效。

2. 回调函数没有正确处理消息

你用的subscribe.callback需要对应的回调函数正确接收参数并解析消息。如果你的message_callback没有正确打印主题和负载,可能会误以为没收到消息。试试把回调函数改成这样:

def message_callback(client, userdata, message):
    print(f"收到主题: {message.topic}")
    print(f"负载内容: {message.payload.decode('utf-8')}")

这样能明确看到是否有消息进来,以及消息的具体内容。

3. $SYS/broker/connection/#的消息触发时机特殊

这个主题并不是持续发送Broker状态的,而是当有客户端连接或断开Broker时才会发布消息。比如,当新客户端连接时,会发布$SYS/broker/connection/<client-id>/state,负载为1;客户端断开时负载为0。如果没有客户端连接状态变化,这个主题不会有任何消息推送。

你可以手动触发一个连接事件来测试:比如用mosquitto_sub命令行工具连接到你的Broker,看看你的应用是否能收到对应的$SYS消息。

4. 订阅操作是否成功?

有时候subscribe.callback可能因为权限问题订阅失败,但没有明确提示。你可以改用非阻塞的客户端方式,添加on_subscribe回调来确认订阅结果:

import paho.mqtt.client as mqtt

def on_connect(client, userdata, flags, rc):
    print(f"客户端连接成功,rc码: {rc}")
    # 订阅$SYS主题并获取结果
    subscribe_result, mid = client.subscribe("$SYS/broker/connection/#")
    if subscribe_result == 0:
        print("订阅$SYS主题成功")
    else:
        print(f"订阅失败,错误码: {subscribe_result}")  # 非0表示权限不足或其他问题

def on_message(client, userdata, msg):
    print(f"主题: {msg.topic} | 负载: {msg.payload.decode()}")

# 初始化客户端
client = mqtt.Client(protocol=mqtt.MQTTv31)
client.on_connect = on_connect
client.on_message = on_message

# 设置认证和TLS
client.username_pw_set(authentication["username"], authentication["password"])
client.tls_set(**TLS)  # 传入你的TLS配置参数

# 连接Broker并开始循环
client.connect(broker, port)
client.loop_forever()

如果订阅失败,错误码会告诉你具体原因(比如1表示权限不足),这时候就回到第一步去调整Broker的权限配置。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:30:53