东莞公司建站:哪个网站图标修改服务更经济实惠?

摘要:修改网站图标,东莞公司建站哪个更便宜,超低价的锦州网站建设,织梦网站模板免费一、什么是幂等性 简单来说,就是对一个接口执行重复的多次请求,与一次请求所产生的结果是相同的&a
修改网站图标,东莞公司建站哪个更便宜,超低价的锦州网站建设,织梦网站模板免费一、什么是幂等性 简单来说#xff0c;就是对一个接口执行重复的多次请求#xff0c;与一次请求所产生的结果是相同的#xff0c;听起来非常容易理解#xff0c;但要真正的在系统中要始终保持这个目标#xff0c;是需要很严谨的设计的#xff0c;在实际的生产环境下就是对一个接口执行重复的多次请求与一次请求所产生的结果是相同的听起来非常容易理解但要真正的在系统中要始终保持这个目标是需要很严谨的设计的在实际的生产环境下我们应该保证任何接口都是幂等的而如何正确的实现幂等就是本文要讨论的内容。 二、哪些请求天生就是幂等的 首先我们要知道查询类的请求一般都是天然幂等的除此之外删除请求在大多数情况下也是幂等的但是ABA场景下除外。 举一个简单的例子 比如先请求了一次删除A的操作但由于响应超时又自动请求了一次删除A的操作如果在两次请求之间又插入了一次A而实际上新插入的这一次A是不应该被删除的这就是ABA问题不过在大多数业务场景中ABA问题都是可以忽略的。 除了查询和删除之外还有更新操作同样的更新操作在大多数场景下也是天然幂等的其例外是也会存在ABA的问题更重要的是比如执行update table set a a 1 where v 1这样的更新就非幂等了。 最后就还剩插入了插入大多数情况下都是非幂等的除非是利用数据库唯一索引来保证数据不会重复产生。 三、为什么需要幂等 1.超时重试 当发起一次RPC请求时难免会因为网络不稳定而导致请求失败一般遇到这样的问题我们希望能够重新请求一次正常情况下没有问题但有时请求实际上已经发出去了只是在请求响应时网络异常或者超时此时请求方如果再重新发起一次请求那被请求方就需要保证幂等了。 2.异步回调 异步回调是提升系统接口吞吐量的一种常用方式很明显此类接口一定是需要保证幂等性的。 3.消息队列 现在常用的消息队列框架比如Kafka、RocketMQ、RabbitMQ在消息传递时都会采取At least once原则也就是至少一次原则在消息传递时不允许丢消息但是允许有重复的消息既然消息队列不保证不会出现重复的消息那消费者自然要保证处理逻辑的幂等性了。 四、实现幂等的关键因素 关键因素1 幂等唯一标识可以叫它幂等号或者幂等令牌或者全局ID总之就是客户端与服务端一次请求时的唯一标识一般情况下由客户端来生成也可以让第三方来统一分配。 关键因素2 有了唯一标识以后服务端只需要确保这个唯一标识只被使用一次即可一种常见的方式就是利用数据库的唯一索引。 五、注解实现幂等性 定义DistributedLock注解 Target({ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) Documented public interface DistributedLock {/*** 保证业务接口的key的唯一性否则失去了分布式锁的意义 锁key* 支持使用spEl表达式*/String key();/*** 保证业务接口的key的唯一性否则失去了分布式锁的意义 锁key 前缀*/String keyPrefix() default ;/*** 是否在等待时间内获取锁如果在等待时间内无法获取到锁则返回失败*/boolean tryLok() default false;/*** 获取锁的最大尝试时间 会尝试tryTime时间获取锁在该时间内获取成功则返回否则抛出获取锁超时异常tryLoktrue时该值必须大于0。
阅读全文