You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

MQTT 3.1.1协议下CloudGate CG0102网关消息订阅异常排查及Ubuntu私有EMQX Broker搭建入门咨询

嘿,我来帮你拆解这两个问题,先搞定MQTTX收不到消息的排查,再给你Ubuntu搭建私有Broker的入门步骤:

一、MQTTX收不到网关消息的可能原因排查
  • 主题不匹配:先确认网关配置的发布主题是不是my_topic——MQTT主题大小写敏感,My_Topicmy_topic完全是两个不同的主题,别犯拼写或大小写的小错误!
  • 网关未成功连接Broker:去看看CloudGate CG0102的日志(一般设备有Web管理界面或者串口日志),有没有连接成功的提示?会不会出现连接超时、认证失败这类错误?
  • MQTT版本不一致:你说网关用的是MQTT 3.1.1,一定要确认MQTTX的连接配置里也选了3.1.1版本(默认可能是3.1或者5.0,版本不匹配会直接导致连接异常)。
  • QoS设置不匹配:如果网关发布消息用的是QoS 1或2,但MQTTX订阅时选了QoS 0,可能会出现消息丢失;另外,如果网关发布后没收到Broker的确认,也不会重复发送消息。
  • 认证细节问题:虽然你说Broker和网关配置一致,但再仔细核对下MQTTX的用户名密码——有没有空格、大小写错误?有些设备会自动给账号密码加空格,这点很容易忽略。另外,EMQX公共Broker如果没开认证,用户名密码可以留空,但如果网关配置了,MQTTX也要完全对应。
  • 网络/防火墙限制:先测试下本地能不能通broker.emqx.io:1883,用telnet broker.emqx.io 1883或者nc -zv broker.emqx.io 1883看看端口是否能连通;有些公司网络会屏蔽MQTT端口,导致消息根本传不过来。
  • Client ID冲突:如果网关和MQTTX用了一模一样的Client ID,Broker会踢掉先连接的那个,导致其中一方没法收发消息,务必确保两者的Client ID完全不同。
  • 消息发布失败:网关可能发了不合法的JSON格式消息,或者消息大小超过了EMQX默认的256KB限制,Broker直接拒绝了。如果能访问EMQX公共Broker的监控页面,也可以看看有没有消息统计异常。
二、Ubuntu Bionic虚拟机搭建私有MQTT Broker入门指南

推荐用EMQX,毕竟你已经熟悉它的公共Broker,上手会特别快。跟着下面的步骤来:

  • 更新系统依赖:先把Ubuntu的包列表更最新,装些必要的依赖:
    sudo apt update && sudo apt install -y apt-transport-https ca-certificates curl gnupg-agent software-properties-common
    
  • 添加EMQX官方源
    curl -fsSL https://repos.emqx.io/gpg.pub | sudo apt-key add -
    sudo add-apt-repository "deb [arch=amd64] https://repos.emqx.io/emqx-ce/deb/ubuntu/ bionic stable"
    
  • 安装EMQX社区版
    sudo apt update && sudo apt install -y emqx
    
  • 启动EMQX服务
    sudo systemctl start emqx
    # 顺便设置开机自启,省得每次重启虚拟机还要手动开
    sudo systemctl enable emqx
    
  • 配置远程访问
    打开EMQX的配置文件/etc/emqx/emqx.conf,找到listeners.tcp.default.bind这一行,把默认的127.0.0.1:1883改成0.0.0.0:1883——这样Broker就能监听所有网卡的请求,允许远程网关连接。改完后重启EMQX生效:
    sudo systemctl restart emqx
    
  • 开放防火墙端口
    Ubuntu Bionic默认用ufw防火墙,得把MQTT的1883端口和EMQX管理界面的18083端口开放:
    sudo ufw allow 1883/tcp
    sudo ufw allow 18083/tcp
    sudo ufw reload
    
  • 验证Broker运行
    打开浏览器访问http://<你的Ubuntu虚拟机IP>:18083,用默认账号admin、密码public登录管理界面,就能看到连接、消息的统计数据,确认Broker正常运行。
  • 测试远程网关连接
    把网关的Broker地址改成你的Ubuntu虚拟机的公网/局域网IP,端口1883,然后用MQTTX订阅对应主题,测试能不能收到消息。
  • Python消费消息示例
    用你熟悉的paho-mqtt库,给你个简单的示例代码,替换成你的私有Broker IP就能用:
    import paho.mqtt.client as mqtt
    
    def on_connect(client, userdata, flags, rc):
        print(f"Connected successfully, result code: {rc}")
        client.subscribe("my_topic")
    
    def on_message(client, userdata, msg):
        print(f"Received message on topic {msg.topic}: {msg.payload.decode()}")
    
    client = mqtt.Client(client_id="python_consumer_001")
    client.on_connect = on_connect
    client.on_message = on_message
    
    # 替换成你的私有Broker IP
    client.connect("<你的Ubuntu虚拟机IP>", 1883, 60)
    
    client.loop_forever()
    

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

火山引擎 最新活动