2017-01-23 147 views
1

我正在为我的android项目实现Paho MQTT Java客户端。它基本上是一个即时消息系统。发布和订阅实施对我来说效果很好,但我留下了一个问题。订阅的客户端能够在发布时接收消息,但是系统检查客户端(订阅者)接收/发送消息的能力有点难以实现,我认为这是因为MQTT没有支持。如何检查代理何时向客户端发送消息(订户)

有没有人有一个想法,如何以不同的方式实现这个逻辑?

回答

1

按在MQTT你可以设置它具有方法deliveryComplete(IMqttDeliveryToken token)的MqttCallback现在按它说这个回调方法将被称为

时传递的消息已完成

文档的文档,并已收到所有确认。

为了保证交货设置QoS(服务质量)为2

如果您还有关于这个方法,您可以使用另一种方法表示怀疑,你可以在客户端预计acknowledgement消息邮件的传递,但这只是mqtt的另一个开销,并且取决于您的要求是否使用此信息。

你可以探索更多关于他们的github它也有示例代码来了解更多关于Mqtt的工作原理。

我希望这有助于

+1

当代理成功发布消息时调用'deliveryComplete(IMqttDeliveryToken token)',当客户端收到您的消息时不会调用此消息。 – George

+0

@George Yeah可能是这种情况,因为你的问题涉及到订户端消息的确认,所以我建议你有一个休息API,它可以将每个消息标记为“已交付”,这应该可以达到目的。如果你想保证消息的传送,你可以将QoS设置为2,并将cleanSession标志设置为false。 –

2

MQTT协议没有内置的端到端传递通知。没有办法知道一个主题有多少用户,它可能在0到很多之间。

如果您需要端到端传递通知,那么您需要将其构建到应用程序中,方法是在每个消息的有效内容中添加一个唯一标识,然后从该标识中发布另一个消息(可能位于单独的主题上)客户订阅了原始主题。消息还应该在QOS 2上发布和订阅,以确保它们仅交付一次。

+0

_消息也应该在QOS 2_上发布和订阅“@hardillb不是QoS 1足够何时实施唯一的有效负载ID? –

+0

QOS 2节省了在双重交付情况下必须跟踪消息 – hardillb

+0

我知道QoS2的功能。在聊天应用程序的情况下,OP将不得不跟踪消息id,以正确排序无序或延迟交付。所以从技术上讲,它可以在QoS1上实现,我猜。 –

相关问题