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()
相关推荐
Java 码农18 小时前
RabbitMQ集群部署方案及配置指南09
分布式·rabbitmq
论迹19 小时前
RabbitMQ
分布式·rabbitmq
Java 码农19 小时前
RabbitMQ集群部署方案及配置指南08--电商业务延迟队列定制化方案
大数据·分布式·rabbitmq
Tao____20 小时前
企业级物联网平台
java·网络·物联网·mqtt·网络协议
Java 码农20 小时前
Spring Boot集成RabbitMQ的各种队列使用案例
spring boot·rabbitmq·java-rabbitmq
win x20 小时前
RabbitMQ快速上手
分布式·rabbitmq
利刃大大20 小时前
【RabbitMQ】安装详解 && 什么是MQ && RabbitMQ介绍
分布式·中间件·消息队列·rabbitmq·mq
Tao____1 天前
基于Ruoyi开发的IOT物联网平台
java·网络·物联网·mqtt·网络协议
Java 码农2 天前
RabbitMQ集群部署方案及配置指南05
分布式·rabbitmq