首页 > 解决方案 > mqtt 协议中订阅者的反馈消息

问题描述

我使用 MQTT 协议在两台计算机之间发送消息。我已经从这段代码中得到了模式。出版商:

import paho.mqtt.client as mqtt
from random import randrange, uniform
import time

mqttBroker ="mqtt.eclipse.org" 

client = mqtt.Client("Temperature_Inside")
client.connect(mqttBroker) 

while True:
    randNumber = randrange(10)

    client.publish("TEMPERATURE", randNumber)
    print("Just published " + str(randNumber) + " to topic TEMPERATURE")
    time.sleep(1)

订户:

import paho.mqtt.client as mqtt
import time

def on_message(client, userdata, message):
    print("received message: " ,str(message.payload.decode("utf-8")))

mqttBroker ="mqtt.eclipse.org"

client = mqtt.Client("Smartphone")
client.connect(mqttBroker) 

client.loop_start()

client.subscribe("TEMPERATURE")
client.on_message=on_message 

time.sleep(1)
client.loop_stop()

我希望在收到消息时向发布者发送反馈。有没有办法获得消息反馈?

标签: socketsclient-servermqttfeedback

解决方案


MQTT 协议中没有端到端的传递通知。这是非常刻意的。

MQTT 是一个发布/订阅系统,旨在将信息的生产者与消费者完全分开。当生产者发布消息时,可能有 0 到无限数量的主题订阅者。也可能有离线订阅者在重新连接时会发送消息(可能是在消息发布后的任何时间)

MQTT 确实提供的是 QOS 级别,但重要的是要记住,这些仅适用于交付过程的单程。例如,在 QOS 2 发布的消息确保它会到达代理,但不保证任何订阅者,因为他们的订阅可能处于 QOS 0。

如果您的系统需要端到端交付通知,那么您将需要自己实现响应消息,这通常是晚餐,通过在初始消息中包含唯一 ID 并在也包含该 ID 的不同主题中发送单独的响应消息


推荐阅读