Java 检查订阅服务器收到的有关MQTT主题发布的消息?

Java 检查订阅服务器收到的有关MQTT主题发布的消息?,java,mqtt,Java,Mqtt,我是MQTT的新手。我使用mqttTopic.publish(message)我可以检查订阅topic的订户是否收到了消息吗?这取决于您的代理实现 首先,您可以通过使用MQTT服务质量来确保您的代理正确接收您的消息: 0表示“开火并忘记” 1表示“至少一次” 2表示“恰好一次” 如果要确保订阅者收到您的邮件,您可以订阅系统主题。例如,代理MOSQUITO提供了$SYS/broker/messages/publish/received,这是自代理启动以来接收的发布消息总数。因此,您必须验证您的

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

这取决于您的代理实现

首先,您可以通过使用MQTT服务质量来确保您的代理正确接收您的消息:

  • 0表示“开火并忘记”
  • 1表示“至少一次”
  • 2表示“恰好一次”
如果要确保订阅者收到您的邮件,您可以订阅系统主题。例如,代理MOSQUITO提供了
$SYS/broker/messages/publish/received
,这是自代理启动以来接收的发布消息总数。因此,您必须验证您的代理实现是否具有此类功能,或者自己编写。

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

QOS(服务质量)级别总是介于单个客户端和代理之间。这意味着,如果客户机以QOS 2发布消息,则确保消息只传递一次的多部分握手仅在客户机和代理之间进行,而不是在订阅主题的任何其他客户机之间(在任何QOS级别)

重要的是要记住,使用发布/订阅系统的部分目的是将信息的生产者(发布者)与消费者(订阅者)分离。发布消息时,可能有从0到无限多订阅者的任意位置


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

QOS仅适用于事务的单个分支(发布者到代理或代理到订阅者),永不结束。另外,检查
$SYS/broker/messages/published/received
计数仅在每次发布的消息只有一个订阅者时有效,这不是一个好的假设。这正是我所说的QOS。系统主题只是一种反映,而不是解决方案。