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

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

  • 8
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot集成RabbitMQMQTT可以使用Spring Boot的AMQP和Paho客户端库。以下是集成步骤: 1. 添加依赖 在pom.xml中添加以下依赖: ``` <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency> <dependency> <groupId>org.eclipse.paho</groupId> <artifactId>org.eclipse.paho.client.mqttv3</artifactId> <version>1.2.0</version> </dependency> ``` 2. 配置RabbitMQ连接 在application.properties中配置RabbitMQ连接信息: ``` spring.rabbitmq.host=localhost spring.rabbitmq.port=5672 spring.rabbitmq.username=guest spring.rabbitmq.password=guest ``` 3. 创建RabbitMQ消息接收者 创建一个类来接收RabbitMQ消息。在该类中,使用@RabbitListener注解标记方法,指定队列名称和消息处理方法。 ``` @Component public class RabbitMQReceiver { @RabbitListener(queues = "test") public void receive(String message) { // 处理消息 } } ``` 4. 创建MQTT消息接收者 创建一个类来接收MQTT消息。在该类中,实现MqttCallback接口,重写messageArrived方法来处理接收到的消息。 ``` @Component public class MQTTReceiver implements MqttCallback { @Override public void connectionLost(Throwable throwable) { // 连接丢失 } @Override public void messageArrived(String topic, MqttMessage mqttMessage) throws Exception { // 处理消息 } @Override public void deliveryComplete(IMqttDeliveryToken iMqttDeliveryToken) { // 消息发送完成 } } ``` 5. 创建RabbitMQ消息发送者 创建一个类来发送RabbitMQ消息。在该类中,注入AmqpTemplate并调用convertAndSend方法来发送消息到指定队列。 ``` @Component public class RabbitMQSender { @Autowired private AmqpTemplate amqpTemplate; public void send(String message) { amqpTemplate.convertAndSend("test", message); } } ``` 6. 创建MQTT消息发送者 创建一个类来发送MQTT消息。在该类中,注入MqttClient并调用connect、publish和disconnect方法来发送消息。 ``` @Component public class MQTTSender { @Autowired private MqttClient mqttClient; @Autowired private MqttConnectOptions mqttConnectOptions; public void send(String topic, String message) throws MqttException { MqttMessage mqttMessage = new MqttMessage(message.getBytes()); mqttClient.connect(mqttConnectOptions); mqttClient.publish(topic, mqttMessage); mqttClient.disconnect(); } } ``` 以上是在Spring Boot中集成RabbitMQMQTT实现消息订阅和发送的基本步骤。需要注意的是,AMQP和MQTT是不同的消息协议,需要根据实际情况选择使用哪个协议。另外,需要确保网络通畅,否则可能会出现消息丢失等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值