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

MQTT里服务端集群部署的时候,怎么订阅的时候消息只收到一次?

MQTT里服务端集群部署的时候,怎么订阅的时候消息只收到一次?

展开
收起
小小鹿鹿鹿 2024-01-17 23:12:19 703 0
2 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    在MQTT协议中,当您使用集群模式部署服务端时,确保消息只被消费一次是可以通过一些配置和机制来实现的。首先,您可以设置发布消息时的参数,例如将clean_session设置为false,同时选择QoS为2。这样,即使在集群环境下,也可以确保消息至少被传递一次且仅一次。

    此外,MQTT协议本身也提供了去重机制来避免消息的重复传输。具体来说,当客户端订阅主题并收到消息后,它会向服务器发送PUBREL消息来取消该主题的订阅。如果服务器没有收到这个消息或者处理失败,它会尝试重新发送PUBLISH消息。为了防止重复的消息传输,服务器会为每个消息分配一个唯一的ID,并且在接收到PUBREL消息时删除该消息。这样,即使有重复的PUBLISH消息,服务器也不会重复发送消息内容。

    总之,通过合理配置发布和订阅的参数以及利用MQTT协议的去重机制,您可以确保在集群模式下的消息消费只会发生一次。

    2024-01-18 12:54:10
    赞同 展开评论 打赏
  • 如果你说的是共享订阅功能,可以使用我们的云端sdk,如果你说的是mqtt sdk设备端的qos,消息收到且仅收到一次,可以把qos设置成2。此回答来自钉群阿里云 微消息队列 MQTT产品咨询群。

    2024-01-18 10:28:54
    赞同 展开评论 打赏

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

相关产品

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

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