我是MQTT的新手。我使用mqttTopic.publish(message)
是否可以检查订阅主题的订户是否收到了消息?
答案 0 :(得分:2)
这取决于您的经纪人实施。
首先,您可以使用MQTT服务质量来确保您的经纪人正确收到了您的消息:
如果要确保订阅者收到您的消息,可以订阅系统主题。例如,代理Mosquitto提供$SYS/broker/messages/publish/received
,这是自代理启动以来收到的PUBLISH消息的总数。因此,您必须验证您的代理实施是否具有这种功能或自己编写代码。
答案 1 :(得分:1)
您不能(在原始协议级别)。 MQTT中没有端到端交付通知。
在单个客户端和代理之间始终存在QOS(服务质量)级别。这意味着,如果客户端在QOS 2上发布消息,则多步握手以确保仅在客户端和代理之间传递该消息一次,而不是可能在任何QOS级别订阅该主题的任何其他客户端
重要的是要记住,使用发布/订阅系统的部分目的是使信息的生产者(发布者)与使用者(订购者)分离。发布消息时,可能存在0到无限数量的订阅者。
如果需要端到端传递通知,则需要在消息的有效负载中包含消息ID,然后从订阅的客户端发布具有该ID的第二条消息,以便发布者可以看到已收到该消息。