检查订户在MQTT主题上发布的消息吗?

时间:2018-06-27 09:47:05

标签: java mqtt

我是MQTT的新手。我使用mqttTopic.publish(message)是否可以检查订阅主题的订户是否收到了消息?

2 个答案:

答案 0 :(得分:2)

这取决于您的经纪人实施。

首先,您可以使用MQTT服务质量来确保您的经纪人正确收到了您的消息:

  • 0表示“忘了火”
  • 1表示“至少一次”
  • 2的意思是“恰好一次”

如果要确保订阅者收到您的消息,可以订阅系统主题。例如,代理Mosquitto提供$SYS/broker/messages/publish/received,这是自代理启动以来收到的PUBLISH消息的总数。因此,您必须验证您的代理实施是否具有这种功能或自己编写代码。

答案 1 :(得分:1)

您不能(在原始协议级别)。 MQTT中没有端到端交付通知。

在单个客户端和代理之间始终存在QOS(服务质量)级别。这意味着,如果客户端在QOS 2上发布消息,则多步握手以确保仅在客户端和代理之间传递该消息一次,而不是可能在任何QOS级别订阅该主题的任何其他客户端

重要的是要记住,使用发布/订阅系统的部分目的是使信息的生产者(发布者)与使用者(订购者)分离。发布消息时,可能存在0到无限数量的订阅者。

如果需要端到端传递通知,则需要在消息的有效负载中包含消息ID,然后从订阅的客户端发布具有该ID的第二条消息,以便发布者可以看到已收到该消息。