Ubuntu 系统下 RabbitMQ 作为 MQTT 代理的配置方案

一、安装与基础配置

1. 安装 RabbitMQ

请参考我的 Ubuntu 系统下 AMQP 协议 RabbitMQ服务器部署这篇文章

2. 启用 MQTT 插件

bash 复制代码
sudo rabbitmq-plugins enable rabbitmq_mqtt

二、创建自定义用户与权限

请参考我的 Ubuntu 系统下 AMQP 协议 RabbitMQ服务器部署这篇文章

RabbitMQ 的用户系统是协议无关的,创建的账户可以用于所有支持的协议(AMQP、MQTT、STOMP 等),所以你如果创建过用户和密码则无需重新创建新的用户。

三、配置自定义端口与安全设置

1. 编辑配置文件

bash 复制代码
sudo nano /etc/rabbitmq/rabbitmq.conf

2. 添加以下配置(关键

bash 复制代码
listeners.tcp.1 =0.0.0.0:5672
mqtt.listeners.tcp.2 = 0.0.0.0:1884

# 指定自定义用户(密码在 RabbitMQ 用户系统中,不在配置文件)
mqtt.default_user = mi_user

# 禁用匿名访问(强制认证)
mqtt.allow_anonymous = false

3. 重启 RabbitMQ

bash 复制代码
sudo systemctl restart rabbitmq-server

# 检查配置是否生效
sudo rabbitmq-diagnostics listeners | grep mqtt

四、配置防火墙

1. 开放自定义端口

bash 复制代码
udo ufw allow 1884/tcp

五、客户端代码示例

安装 paho-mqtt 1.6.1版本安装包

bash 复制代码
pip install paho-mqtt==1.6.1 -i https://mirrors.aliyun.com/pypi/simple/
Python 发送端(发布消息)
python 复制代码
# 文件: publisher.py
import paho.mqtt.client as mqtt
import time

# 配置(修改为你的实际值)
BROKER = "192.168.1.100"  # RabbitMQ 服务器 IP
PORT = 1884
TOPIC = "devices/sensor/data"
CLIENT_ID = "python_publisher"
USERNAME = "mi_user"
PASSWORD = "YourPassword123"

# 创建客户端
client = mqtt.Client(CLIENT_ID)

# 设置认证
client.username_pw_set(USERNAME, PASSWORD)

# 连接回调
def on_connect(client, userdata, flags, rc):
    if rc == 0:
        print("✅ 连接成功")
    else:
        print(f"❌ 连接失败,错误码: {rc}")

client.on_connect = on_connect

# 连接
client.connect(BROKER, PORT, 60)
client.loop_start()
time.sleep(1)

# 发布消息
message = "{'temp': 25.6, 'humidity': 60}"
result = client.publish(TOPIC, message, qos=1)

if result.rc == mqtt.MQTT_ERR_SUCCESS:
    print(f"✅ 消息已发布到 {TOPIC}: {message}")
else:
    print(f"❌ 发布失败")

time.sleep(1)
client.loop_stop()
client.disconnect()
Python 接收端(订阅消息)
python 复制代码
# 文件: subscriber.py
import paho.mqtt.client as mqtt

# 配置
BROKER = "192.168.1.100"
PORT = 1884
TOPIC = "devices/sensor/data"
CLIENT_ID = "python_subscriber"
USERNAME = "mi_user"
PASSWORD = "YourPassword123"

def on_message(client, userdata, msg):
    print(f"📥 收到消息 - Topic: {msg.topic}, Payload: {msg.payload.decode()}")

def on_connect(client, userdata, flags, rc):
    if rc == 0:
        print("✅ 连接成功")
        client.subscribe(TOPIC, qos=1)
        print(f"📋 已订阅: {TOPIC}")
    else:
        print(f"❌ 连接失败,错误码: {rc}")

client = mqtt.Client(CLIENT_ID)
client.username_pw_set(USERNAME, PASSWORD)
client.on_connect = on_connect
client.on_message = on_message

client.connect(BROKER, PORT, 60)
print("🔄 等待消息... (按 Ctrl+C 退出)")
client.loop_forever()
相关推荐
不懂的浪漫3 小时前
mqtt-plus 架构解析(四):MqttMessageInterceptor 的扩展点设计
java·spring boot·物联网·mqtt
EMQX5 小时前
Everything Will Flow:面向 AI 的新一代融合消息流平台 FlowMQ 正式发布
物联网·mqtt·智能硬件·flowmq
不懂的浪漫6 小时前
mqtt-plus 架构解析(五):错误处理与 ErrorAction 聚合策略
java·spring boot·后端·物联网·mqtt·架构
不懂的浪漫6 小时前
mqtt-plus 架构解析(三):Payload 序列化与反序列化,为什么要拆成两条链
java·spring boot·物联网·mqtt·架构
架构师老Y8 小时前
011、消息队列应用:RabbitMQ、Kafka与Celery
python·架构·kafka·rabbitmq·ruby
Rick199312 小时前
rabbitmq, rocketmq, kafka这三种消息如何分别保住可靠性,顺序性,以及应用场景?
kafka·rabbitmq·rocketmq
星野云联AIoT技术洞察1 天前
OPC UA、MQTT、Modbus 应该如何分层:工业 IoT 接入架构新思路
mqtt·modbus·opc ua·边缘网关·设备接入·协议分层·工业iot
EMQX1 天前
S3 正在吞噬一切:AI 时代的基础软件架构革命
人工智能·物联网·mqtt·flowmq
不懂的浪漫1 天前
mqtt-plus 架构解析(一):分层架构与设计哲学
spring boot·分布式·物联网·mqtt·架构
Z文的博客2 天前
嵌入式 ARM 设备交叉编译 mosquitto 2.0.20 (完整 TLS 支持) 详细教程 TRAE全程辅助,没敲一行代码
qt·mqtt·嵌入式·ai编程·mosquitto·嵌入式linux·trae