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()
相关推荐
phltxy16 小时前
RabbitMQ高级特性-消息确认与持久性博客
分布式·rabbitmq·ruby
未若君雅裁19 小时前
RabbitMQ 消息可靠性:生产者确认、持久化、消费者ACK与幂等消费
分布式·微服务·rabbitmq
小江的记录本2 天前
【Kafka核心】Kafka 3.0+ KRaft模式(替代ZooKeeper)核心原理与优势
java·数据库·分布式·后端·zookeeper·kafka·rabbitmq
加油20192 天前
嵌入式软件技术栈和学习路线详解
linux·arm开发·数据结构·mqtt·设计模式·嵌入式
phltxy2 天前
RabbitMQ SpringBoot消息队列与应用间通信
spring boot·rabbitmq·java-rabbitmq
过期动态2 天前
【RabbitMQ高级篇】生产者可靠性、MQ可靠性、消费者可靠性以及延迟队列的实现
java·数据结构·分布式·算法·rabbitmq·ruby
phltxy3 天前
RabbitMQ 工作模式与Java原生客户端案例
java·rabbitmq·java-rabbitmq
装不满的克莱因瓶3 天前
【项目亮点四】支付订单超时处理与状态补偿机制设计
java·开发语言·后端·rabbitmq·消息中间件
开开心心就好3 天前
免费无广告的批量卸载与系统清理工具
linux·服务器·网络·智能手机·rabbitmq·excel·memcached
行者-全栈开发3 天前
【AI交通安全】IoT智能机车实战:ESP32+MQTT+Flink全栈方案,事故率降65%
人工智能·物联网·mqtt·flink·时序数据库·influxdb·智能机车