在 Python 中,使用 MQTT 客户端连接 RabbitMQ 可以通过 paho-mqtt 库来实现。RabbitMQ 必须启用 MQTT 插件,这样才能作为一个 MQTT Broker 工作。

以下是一个完整的 Python 示例,用 paho-mqtt 客户端连接 RabbitMQ 并发布和订阅消息。

步骤 1: 启用 RabbitMQ 的 MQTT 插件

在 RabbitMQ 上启用 MQTT 插件:

rabbitmq-plugins enable rabbitmq_mqtt

RabbitMQ 的默认 MQTT 端口是 1883,WebSocket 的端口是 15675

步骤 2: 安装 Python 的 MQTT 客户端库

使用 pip 安装 paho-mqtt

pip install paho-mqtt

步骤 3: 编写 Python MQTT 客户端代码

完整的 Python 示例

该示例包括连接 RabbitMQ、发布消息、订阅消息,以及处理消息的回调函数。

import paho.mqtt.client as mqtt

# MQTT Broker 配置
BROKER_ADDRESS = "localhost"  # RabbitMQ 地址
BROKER_PORT = 1883  # MQTT 的端口

# 当客户端连接到 Broker 时调用的回调函数
def on_connect(client, userdata, flags, rc):
    if rc == 0:
        print("Connected to MQTT Broker!")
        client.subscribe("test/topic")  # 连接后订阅一个主题
    else:
        print(f"Failed to connect, return code {rc}")

# 当客户端接收到订阅的消息时调用的回调函数
def on_message(client, userdata, msg):
    print(f"Received message: {msg.payload.decode()} on topic: {msg.topic}")

# 当客户端发布消息成功时调用的回调函数
def on_publish(client, userdata, mid):
    print(f"Message published: {mid}")

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

# 绑定回调函数
client.on_connect = on_connect
client.on_message = on_message
client.on_publish = on_publish

# 连接到 RabbitMQ MQTT Broker
client.connect(BROKER_ADDRESS, BROKER_PORT, 60)

# 启动网络循环,处理网络流量和回调
client.loop_start()

# 发布消息到主题
client.publish("test/topic", "Hello MQTT from RabbitMQ!")

# 阻塞主线程,以保持连接并接收消息
try:
    while True:
        pass
except KeyboardInterrupt:
    print("Disconnecting from MQTT Broker...")
    client.loop_stop()
    client.disconnect()

代码说明

  1. MQTT Broker 配置:在 BROKER_ADDRESS 中设置 RabbitMQ 的地址和端口(默认为 1883)。
  2. 连接到 Brokerclient.connect(BROKER_ADDRESS, BROKER_PORT, 60) 连接到 RabbitMQ 服务器。
  3. 发布消息client.publish("test/topic", "Hello MQTT from RabbitMQ!") 发布一条消息到 test/topic 主题。
  4. 订阅主题:在 on_connect 回调函数中,客户端在连接后立即订阅了 test/topic 主题。
  5. 消息回调:当收到订阅主题的消息时,on_message 回调函数会被调用,并打印消息内容。

步骤 4: 配置 RabbitMQ 用户权限

确保 RabbitMQ 用户有权限访问虚拟主机。使用以下命令为默认的虚拟主机设置用户权限:

rabbitmqctl set_permissions -p / guest ".*" ".*" ".*"

测试

  1. 启动 RabbitMQ,并确保 MQTT 插件已启用。
  2. 运行 Python 脚本,客户端将连接到 RabbitMQ,订阅并发布消息。
  3. 发布的消息将通过 on_message 回调函数接收到。

通过这种方式,你可以使用 Python 的 MQTT 客户端与 RabbitMQ 进行通信,发布和订阅消息。这种架构非常适用于物联网、消息通知等场景。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐