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

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

展开
收起
小小鹿鹿鹿 2024-01-17 23:12:19 1057 分享 版权
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-learning.com/

还有其他疑问?
咨询AI助理