开发者社区 > 云原生 > 消息队列 > 正文

MQTT中假如我们客户端设置为QoS0,目标(排除网络的影响)收不到信息的几率有多大?

咱们微消息MQTT,我们的场景是服务端给设备端发送消息,设备端给服务端发消息。
客户端QoS有三个设置:
QoS0:代表最多分发一次。
QoS1:代表至少达到一次。
QoS2:代表仅分发一次。
假如我们客户端设置为QoS0,目标(在线,网络优良的情况下,也就是说,排除网络的影响)收不到信息的几率有多大?我们的业务允许偶尔丢个消息,所以我们要咨询一下,看看咱们有没有相关的稳定性测试,有没有专门测试过在优良网络下的QoS0的测试。

展开
收起
小易01 2023-07-24 17:50:35 283 0
2 条回答
写回答
取消 提交回答
  • 如果在MQTT中,客户端设置了QoS 0(At most once),则消息传输的可靠性较低。根据MQTT协议规范,当使用QoS 0时,消息仅发送一次,不会进行重试或确认。

    因此,目标收不到信息的情况可能由以下几个因素导致:

    1. 消息丢失:由于QoS 0不提供任何重试机制,如果消息在传输过程中发生丢失,目标可能无法接收到该消息,因为没有重新传输的机制。

    2. 网络问题:即使排除了网络的影响,仍然存在网络丢包的可能性。如果在消息传输过程中发生网络丢包,消息可能会丢失,无法到达目标设备。

    3. 目标离线或未准备好:在使用QoS 0时,如果目标设备在消息发送时处于离线状态或未准备好接收消息,那么消息将会丢失,并且目标无法接收到消息。

    需要注意的是,由于QoS 0的特性,它更适用于对实时性要求不高、无关紧要或频繁发送的消息。如果您的应用程序对消息的可靠性有更高的要求,建议使用更高级别的QoS(如QoS 1或QoS 2)来确保消息的可靠传输。

    2023-07-27 23:16:22
    赞同 展开评论 打赏
  • 意中人就是我呀!

    正常情况下都会推送一次。此回答整理至钉群“阿里云 微消息队列 MQTT产品咨询群”

    2023-07-26 11:22:02
    赞同 展开评论 打赏

高弹性低成本、更稳定更安全、智能化免运维的消息队列服务,涵盖RocketMQ、Kafka、RabbitMQ、MQTT、MNS等。 RocketMQ一站式学习:https://rocketmq-learning.com

相关产品

  • 云消息队列 MQ
  • 相关电子书

    更多
    RocketMQ Client-GO 介绍 立即下载
    RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载
    基于 RocketMQ Prometheus Exporter 打造定制化 DevOps 平台 立即下载