首页 > 其他分享 >用 `paho-mqtt` 客户端连接 RabbitMQ 并发布和订阅消息

用 `paho-mqtt` 客户端连接 RabbitMQ 并发布和订阅消息

时间:2024-09-03 10:54:42浏览次数:11  
标签:MQTT RabbitMQ Broker mqtt client paho 客户端

在 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 进行通信,发布和订阅消息。这种架构非常适用于物联网、消息通知等场景。

标签:MQTT,RabbitMQ,Broker,mqtt,client,paho,客户端
From: https://blog.csdn.net/h1986y/article/details/141855473

相关文章

  • rabbitmq高可用集群搭建
    需求分析基本情况在进行RabbitMQ搭建时,我们基于现有的连接数据和业务需求进行了深入分析。目前的统计数据显示,连接数为631,队列数为80418。为了确保业务需求的顺利满足,我们需要在云产品和自建RabbitMQ消息队列服务之间做出选择。经过比较发现,即使选择腾讯云的最高规格配置,其Queue......
  • RabbitMQ 入门教程
    介绍RabbitMQ是一个消息中间件,它实现了AMQP(AdvancedMessageQueuingProtocol)协议。本教程将引导你通过几个简单的步骤来学习如何使用RabbitMQ发送和接收消息。环境准备1.安装RabbitMQ-在你的系统上安装RabbitMQ:https://www.rabbitmq.com/download.html-......
  • RabbitMQ 入门教程
    介绍RabbitMQ是一个开源的消息代理和队列服务器,实现了AMQP0-9-1标准。它能够接收、存储并转发消息数据。安装与配置1.安装RabbitMQForLinux(Ubuntu/Debian)```bashsudoaptupdatesudoaptinstallrabbitmq-server```FormacOS(Homebrew)```bashbrewins......
  • RabbitMQ 队列使用基础教程
    实践环境JDK1.8.0_121amqp-client5.16.0附:查看不同版本的amqp-client客户端支持的JavaJDK版本https://www.rabbitmq.com/client-libraries/java-versionsmavnsettings.xml<?xmlversion="1.0"encoding="UTF-8"?><settingsxsi:schemaLocation="h......
  • Java消息队列:RabbitMQ与Kafka的集成与应用
    Java消息队列:RabbitMQ与Kafka的集成与应用大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在现代的分布式系统中,消息队列是实现系统间通信、解耦和提高可扩展性的重要组件。RabbitMQ和Kafka是两个广泛使用的消息队列系统,它们各有特点和优势。本文将介......
  • ESP32-C3在MQTT访问时出现“Last error code reported from esp-tls: 0x8001”和问题
    接前一篇文章:ESP32-C3在MQTT访问时出现“Lasterrorcodereportedfromesp-tls:0x8001”和问题的分析(2)上一回讲解了所遇问题log中的“esp-tls:couldn'tgethostnamefor:iot-emqx-pre.nanshe-tech.com:getaddrinfo()returns202,addrinfo=0x0”,再来回顾一下。这一......
  • RabbitMQ核心架构
    RabbitMQ架构设计 Producer:负责产生消息。Connection:RabbitMQ客户端和代理服务器之间的TCP连接。Channel:建立在连接之上的虚拟连接,RabbitMQ操作都是在信道中进行。Broker:一个Broker可以看做一个RabbitMQ服务节点或者服务实例。Exchange:生产者发送消息到交换器,交换......
  • RabbitMQ 集群与高可用性
    目录单节点与集群部署1.1.单节点部署1.2.集群部署 镜像队列1.定义与工作原理2.配置镜像队列3.应用场景4.优缺点5.Java示例分布式部署1.分布式部署的主要目标2.典型架构设计3.RabbitMQ分布式部署的关键技术4.部署策略和实践5.分布式部署的挑战和解......
  • 四博智联OpenMQTTGateway蓝牙网关,支持100多种蓝牙传感器
    以下是一篇关于OpenMQTTGateway的软文,包含了相关图片,以更好地展示该项目的功能和优势。模组规格OpenMQTTGateway:一站式解决物联网协议整合的强大工具OpenMQTTGateway是一个开源项目,旨在将多种不同的物联网协议整合到一个统一的固件中。通过这一创新性的解决方案,开发......
  • MQTT详细介绍
    1.MQTT是什么  MQTT是基于发布与订阅模式的轻量级通讯协议,是基于TCP/IP建立的应用层协议。2.MQTT的特点轻量级:MQTT协议非常简洁,以极少的代码和有限的带宽就能实现可靠的消息传输。实时性:MQTT提供实时消息服务,确保设备之间的数据传输及时可靠。低开销:MQTT协议的开销......