消息队列-重复消息-幂等

MQTT是一个适用于物联网的发布订阅协议,提供QoS等级确保消息传递。在面临重复消息问题时,通过实现幂等性来解决。幂等性可以通过数据库唯一约束、更新前置条件和记录检查操作等方法实现。MQTT在IOT中的应用包括心跳、会话恢复和主题订阅,以适应网络不稳定情况。
摘要由CSDN通过智能技术生成

MQTT协议(Message Queuing Telemetry Transport),翻译过来就是遥信消息队列传输,MQTT是一个基于TCP的发布订阅协议,设计的初始目的是为了极有限的内存设备和网络带宽很低的网络不可靠的通信,非常适合物联网通信。

MQTT支持三种QOS等级:
QoS 0:“最多一次”,消息发布完全依赖底层 TCP/IP 网络。分发的消息可能丢失或重复。例如,这个等级可用于环境传感器数据,单次的数据丢失没关系,因为不久后还会有第二次发送。
QoS 1:“至少一次”,确保消息可以到达,但消息可能会重复。
QoS 2:“只有一次”,确保消息只到达一次。例如,这个等级可用在一个计费系统中,这里如果消息重复或丢失会导致不正确的收费

目前主流的消息队列都是至少一次(at least once)

消费到重复消息的解决方案:消费做好幂等性(对资源的操作,无论操作一次还是多次,其资源本身不发生变化)

常用的设计幂等性操作的方法:
1、利用数据库的唯一约束实现幂等性

只插入一条记录,后续插入都会失败(insert if not exist);neo4j中,只要id相同,都会插到同一条记录中,而且数据库中就只有一条,不会产生多条

2、为更新的数据设置前置条件

如果满足条件就更新数据,否则拒绝更新数据,在更新数据的时候,同时变更前置条件中需要判断的数据。比如给数据增加一个版本号属性,每次更新数据前,比较当前数据的版本号是否和消息中的版本号一致,如果不一致就拒绝更新数据&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值