苏眠月|写一个通用的幂等组件,我觉得很有必要( 三 )


我目前做了一个自动生成唯一标识的功能 , 简单来说就是根据请求的信息进行 MD5 , 如果 MD5 值没有变化就认为是同一次请求 。
需要进行 MD5 的内容有请求 URL 参数 , 请求体 , 请求头信息 。 请求头的信息在没有指定用户相关 Key 的场景下会进行全部拼接 , 如果配置了请求头 userId 为用户的标识 , 那么只会用 userId 。
会在请求的入口处进行幂等 Key 的自动生成 , 如果在使用幂等注解的时候没有指定 spelKey, 就会使用自动生成的 Key 。
存储结构Redis: 使用 String 类型存储 , Key 是幂等 Key, Value 默认为 1 。
Mysql: 需要创建一张记录表 。 (过期的数据需要定时清理 , 也可以永久存储)
CREATE TABLE `idempotent_record` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键',`key` varchar(50) NULL DEFAULT '',`value` varchar(50) NOT NULL DEFAULT '',`expireTime` timestamp NOT NULL COMMENT '过期时间',`addTime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='幂等记录';Mongo: 字段跟 Mysql 一样 , 转换成 Json 格式即可 。 Mongo 会自动创建集合 。
码字不易 , 可以的话来个三连击 , 感谢!
关于作者:尹吉欢 , 简单的技术爱好者 , 《Spring Cloud 微服务-全栈技术与案例解析》, 《Spring Cloud 微服务 入门 实战与进阶》作者, 公众号猿天地发起人 。
微信搜索 猿天地 回复 kitty 获取源码


推荐阅读