怎样实现消息的冥等性

项目使用了异步的消息队列点对点同步,怎样实现消息操作的冥等,或者说保证消息不重复消费是一个问题。解决方案如下:

1.对于update和delete操作,由于多次操作结果相同,因此不用理会。

2.对于数据的加减乘除操作,不能保证冥等,读取数据后,给该数据生成一个version版本号,将id和version作为key,value存入redis,提交操作时,

验证此version版本号与redis中版本号是否一致,并清除缓存。

3.对于insert操作,给这个消息生成唯一主键id,存入数据库,利用数据库的主键冲突来防止消息重复消费。

4.最后一招,将id和message压缩值存redis,写入数据库前验证此redis中是否存在,如存在则抛出异常

猜你喜欢

转载自www.cnblogs.com/zhanghongbo19870214/p/9117060.html
今日推荐