咱们微消息MQTT,我们的场景是服务端给设备端发送消息,设备端给服务端发消息。
客户端QoS有三个设置:
QoS0:代表最多分发一次。
QoS1:代表至少达到一次。
QoS2:代表仅分发一次。
假如我们客户端设置为QoS0,目标(在线,网络优良的情况下,也就是说,排除网络的影响)收不到信息的几率有多大?我们的业务允许偶尔丢个消息,所以我们要咨询一下,看看咱们有没有相关的稳定性测试,有没有专门测试过在优良网络下的QoS0的测试。
如果在MQTT中,客户端设置了QoS 0(At most once),则消息传输的可靠性较低。根据MQTT协议规范,当使用QoS 0时,消息仅发送一次,不会进行重试或确认。
因此,目标收不到信息的情况可能由以下几个因素导致:
消息丢失:由于QoS 0不提供任何重试机制,如果消息在传输过程中发生丢失,目标可能无法接收到该消息,因为没有重新传输的机制。
网络问题:即使排除了网络的影响,仍然存在网络丢包的可能性。如果在消息传输过程中发生网络丢包,消息可能会丢失,无法到达目标设备。
目标离线或未准备好:在使用QoS 0时,如果目标设备在消息发送时处于离线状态或未准备好接收消息,那么消息将会丢失,并且目标无法接收到消息。
需要注意的是,由于QoS 0的特性,它更适用于对实时性要求不高、无关紧要或频繁发送的消息。如果您的应用程序对消息的可靠性有更高的要求,建议使用更高级别的QoS(如QoS 1或QoS 2)来确保消息的可靠传输。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/