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

订阅mqtt后能保证消息的先后顺序嘛?

订阅mqtt后能保证消息的先后顺序嘛?

展开
收起
wenti 2023-03-13 11:55:12 1485 0
6 条回答
写回答
取消 提交回答
  • 月移花影,暗香浮动

    MQTT 协议并不保证消息的顺序,也就是说,消息到达客户端的顺序可能与其在发布者发布时的顺序不同。这是因为 MQTT 引入了多个并行的消息队列,以便处理来自发布者的消息,同时在网络中传输这些消息时可能发生延迟,导致消息到达客户端的顺序与发布时不同。

    如果您需要确保消息的顺序,则需要通过在发布者和订阅者之间确定消息的序列号、时间戳或其他标识符来进行控制。可以在消息的数据载荷中包含这些标识符,以便订阅者可以对它们进行排序和处理。此外,您还可以使用 QoS 等质量级别来保证消息的可靠传输。

    2023-03-13 14:17:59
    赞同 展开评论 打赏
  • 发表文章、提出问题、分享经验、结交志同道合的朋友

    首先,在MQTT中,不保证订阅消息的先后顺序。

    其次,如果应用场景需要保证消息的先后顺序,给你提供几种可能的解决方案:

    1、使用有序消息队列(Ordered Message Queue):在有序消息队列中,消息按照特定的顺序排列,并且每个消费者只能消费队列中的一个消息。当一个消息被消费后,队列会自动将下一个消息推送给该消费者。这种方式可以保证消息的先后顺序,但是需要实现额外的队列管理和维护机制。

    2、对消息进行时间戳标记:消息发布者在发布消息时,可以为每条消息加上一个时间戳,订阅者在接收到消息后可以按照时间戳顺序进行处理。但是这种方式可能存在消息时钟不同步的问题,需要额外的时间同步机制。

    3、在消息体中加入序号:消息发布者在发布消息时,为每个消息赋予一个唯一的序号,订阅者在接收到消息后按照序号顺序进行处理。但是这种方式可能存在消息序号重复或者跳跃的问题,需要额外的序号管理机制。

    最后,这些需要在应用程序中进行额外的处理和管理,而且可能会对系统性能产生一定的影响

    2023-03-13 13:35:28
    赞同 展开评论 打赏
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    无法保证使用不同QoS值发布的消息的相对顺序

    2023-03-13 13:30:57
    赞同 展开评论 打赏
  • MQTT协议本身并不保证消息的先后顺序。当多个客户端订阅同一个主题时,由于网络原因、客户端处理速度不一等原因,消息可能会以不同的顺序到达不同的客户端。因此,在订阅MQTT主题时,不应该依赖消息的先后顺序来进行业务处理。 如果您需要确保消息的先后顺序,则可以在消息发布时进行控制,例如在消息中添加序列号或时间戳等标识,然后在客户端接收到消息后,进行排序或按时间戳进行处理。另外,也可以使用MQTT的QoS(Quality of Service)机制来保证消息的可靠传输,例如使用QoS2级别的消息发布和订阅,确保消息不会丢失和重复。但是,即使使用QoS2,也不能保证消息的先后顺序。

    2023-03-13 13:26:11
    赞同 展开评论 打赏
  • 可以,如果要保证消息的先后顺序,建议使用QoS2,QoS2(只有一次):消息将保证传递,并且只有一次且按顺序。

    2023-03-13 13:12:44
    赞同 展开评论 打赏
  • 今天也要加油吖~

    消息要有顺序,首先得保证producer发送消息有顺序。

    2023-03-13 13:10:18
    赞同 展开评论 打赏
滑动查看更多
问答分类:

涵盖 RocketMQ、Kafka、RabbitMQ、MQTT、轻量消息队列(原MNS) 的消息队列产品体系,全系产品 Serverless 化。RocketMQ 一站式学习:https://rocketmq.io/

热门讨论

热门文章

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载