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

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

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

展开
收起
小小鹿鹿鹿 2024-01-17 23:12:19 216 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
    赞同 展开评论 打赏

多个子产品线联合打造金融级高可用消息服务以及对物联网的原生支持,覆盖多行业。

相关产品

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

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