Python MQTT订阅消息QOS=1的注意点

本文详细解读了MQTT协议的QoS 0、1和2等级,强调了即使设置为QoS 1,新连接的订阅者不会立即接收到旧消息。重点介绍了客户端ID、订阅和确认机制,以及在实际应用中如何确保消息传递的可靠性和条件下的消息重传。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

QoS0:最多发送一次,到达不到达发布者不管,发布者(客户端,服务端做为发送端的时候)只发送一次,不管接收端是否收到数据;

QoS1:至少到达一次,发布者需要到达后有确认,发布者(客户端,服务端做为发送端的时候)发布消息后等待接收者(客户端,服务端做为接收端的时候)的确认信息报文;如果发布都没有收到确认报文,发布者会一直发送消息;

QoS2:只有一次到达,发布者需要到达后确认,接收者需要发布者再次确

按照介绍的MQTT消息的三个等级如上所示,

按照我之前的理解是如果消息等级是1 ,那么至少应该有一个客户端能收到消息。

但是这里需要注意的是如果消息发送时,没有任何订阅客户端连接到Mqtt 服务器,那么无论你的消息等级有多高,新连接的订阅客户端是不会收到这条消息的。

具体的场景是:

(1)我发送了一条qos=1的消息,然后我启动了一个订阅客户端,这时我的订阅客户端是收不到消息的。

(2)为了能收到qos=1的消息,订阅客户端需要使用固定clientid登陆mqtt 服务器,并且订阅某个主题,这时如果订阅客户端断线,断线期间有消息发送,那么订阅客户端在重连之后是可以收到消息的。

下面用python paho-mqtt举例

#发送端 设置消息级别是1
mqttclient.publish("topic1", payload="hello world", qos=1)

 

#clean_session=False 是需要设置的参数,表示客户端是一个永久性客户端,短线
#重连后,可以收到错过的消息
scribeclient = mqtt.Client(client_id="clientid11111", clean_session=False)

#连接后订阅的级别同样需要有参数qos=1
self.client.publish(topic, payload=msg, qos=1)

MQTT(Message Queuing Telemetry Transport)是一个轻量级的消息传输协议,非常适合于物联网(IoT)场景的通信。在Python中,可以使用多种库来实现MQTT订阅功能,其中最常用的是`paho-mqtt`。 要使用`paho-mqtt`进行MQTT订阅,首先需要安装这个库。可以通过pip安装命令来安装: ```bash pip install paho-mqtt ``` 安装完成后,就可以开始编写代码来实现MQTT订阅。以下是一个简单的Python代码示例,展示了如何连接到MQTT服务器并订阅一个主题: ```python import paho.mqtt.client as mqtt # MQTT服务器的IP地址和端口 MQTT_BROKER = 'localhost' MQTT_PORT = 1883 # 客户端ID,任意字符串即可 CLIENT_ID = 'python_mqtt_subscriber' # 订阅的主题 MQTT_TOPIC = 'test/topic' # 当连接到MQTT服务器时触发的回调函数 def on_connect(client, userdata, flags, rc): print("Connected with result code " + str(rc)) # 订阅主题 client.subscribe(MQTT_TOPIC) # 当接收到订阅主题的消息时触发的回调函数 def on_message(client, userdata, msg): print(f"Received message: {msg.payload.decode()} on topic {msg.topic} with QoS {msg.qos}") # 创建MQTT客户端实例 client = mqtt.Client(CLIENT_ID) # 绑定回调函数 client.on_connect = on_connect client.on_message = on_message # 连接到MQTT服务器 client.connect(MQTT_BROKER, MQTT_PORT, 60) # 开始循环处理网络流量、自动重连等 client.loop_forever() ``` 在这个例子中,我们创建了一个`paho.mqtt.client`的实例,定义了连接和消息接收时的回调函数。连接到MQTT服务器后,订阅了一个主题,并在收到该主题的消息时通过回调函数打印出消息内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值