SOA 服务化 非幂等操作 处理方法
非幂等操作场景
场景
添加,删除操作前端操作按钮未遮罩造成重复提交
HTTP中间件重试机制造成重复提交
- 很多http中间件都有重试机制
消息中间件重试机制造成重复提交
服务调用服务失败重试机制
解决方法
添加,删除操作后前端操作按钮遮罩或者跳转页面
常识。但是不能从根本上解决问题。
HTTP 消息中间件,服务调用最多调用一次设置
Dubbo可以设置重试次数,RocketMq也有设置。
Token令牌一次使用后就失效
比如进入下单界面先生成一个Token,订单提交带Token,后台判断Token是否应使用过,使用过就重复提交。
Code ID唯一性限制重复提交
比如服务调用者生成唯一Code,服务提供者判断Code唯一性,不唯一就返回操作错误。消息也可使用。
最牛把非幂等操作变成幂等操作
这是最牛的,比如删除操作,比较容易做成幂等,更新操作也可。