Mqtt 如何检查代理何时已将消息传递给客户端(订户)

Mqtt 如何检查代理何时已将消息传递给客户端(订户),mqtt,Mqtt,我正在为我的android项目实现Paho MQTT Java客户端。它基本上是一个即时通讯系统。发布和订阅实现对我来说工作得很好,但我还有一个问题。订阅的客户端在发布消息时能够接收消息,但是系统检查客户端(订户)何时接收/发送消息的能力有点难以实现,我认为这是因为MQTT不支持这一点 有人知道如何以不同的方式实现此逻辑吗?根据MQTT上的文档,您可以设置MqttCallback,其方法为deliveryComplete(IMqttDeliveryToken),现在根据文档,它声明将调用此回调方

我正在为我的android项目实现Paho MQTT Java客户端。它基本上是一个即时通讯系统。发布和订阅实现对我来说工作得很好,但我还有一个问题。订阅的客户端在发布消息时能够接收消息,但是系统检查客户端(订户)何时接收/发送消息的能力有点难以实现,我认为这是因为MQTT不支持这一点


有人知道如何以不同的方式实现此逻辑吗?

根据MQTT上的文档,您可以设置MqttCallback,其方法为deliveryComplete(IMqttDeliveryToken),现在根据文档,它声明将调用此回调方法

完成邮件的传递并收到所有确认时

要确保交付,请将QoS(服务质量)设置为2

如果您对这种方法仍有疑问,您可以使用另一种方法,在这种方法中,您可以期望在消息传递时从客户机收到
确认
消息,但是这只是mqtt的另一种开销,使用与否取决于您的要求

您可以进一步了解它们的特性,因为它还提供了示例代码,以了解有关Mqtt工作原理的更多信息


我希望这会有所帮助

MQTT协议没有内置的端到端传递通知。无法知道一个主题有多少订阅者,它可以是0到多个订阅者之间的任意位置


如果需要端到端传递通知,则需要将其构建到应用程序中,方法是在每条消息的有效负载中添加一个唯一的id,然后从订阅原始主题的客户端发布另一条具有该id的消息(可能在单独的主题上)。还应在QOS 2上发布和订阅消息,以确保它们只传递一次。

deliveryComplete(IMqttDeliveryToken令牌)
在代理成功发布您的消息时调用,而在客户端收到您的消息时不调用。@George Yeah可能是这样,由于您的问题与用户端的消息确认有关,我建议您使用rest api,该api可以将每个消息标记为已交付的
,这应该可以达到目的。如果要保证邮件的传递,可以将
QoS
设置为2,并将
cleanSession
标志设置为
false
“邮件也应在QoS 2上发布和订阅”@hardillb在实现唯一有效负载id时,QoS 1还不够吗?QoS 2省去了在双重传递情况下跟踪消息的麻烦。我知道QoS2的作用。对于聊天应用程序,OP无论如何都必须跟踪消息ID,以正确排序混乱或延迟的传递。所以从技术上讲,我想它是可以在QoS1上实现的。没错,但是如果让代理做一些工作,就更容易做到