分布式rpc接口幂等解决方案8-17

1.RPC接口http请求

客户端向服务器端发送http请求,http请求基于请求与响应的,如果服务器端没有及时的响应请求给客户端的情况下,有可能会造成客户端会一直阻塞等待。

客户端调用服务器端接口的时候,会设置一个超时时间5s-10s 30s
如果服务器端处理客户端业务逻辑非常耗时的情况下,应该改成mq异步执行。

2.接口超时与接口调用不通区别?

接口响应超时:服务器端实际上已经接受到客户端请求,服务器端没有及时响应请求给客户端
java.net.SocketTimeoutException: Read timed out

当客户端设置的超时时间<服务器端处理业务逻辑时间,就会发生重试的策略。
调用不通:服务器端已经为宕机状态
java.net.ConnectException: Connection refused: connect

3.如果重试多还是无法获取到响应结果请问如何处理?

  1. 限制重试的次数 3次;推荐
  2. 延长客户端调用服务器端接口超时时间;不推荐
  3. 改用mq异步执行;推荐

4.如何保证接口的幂等性问题

1. 接口实现做insert类型的情况下 根据全局的id 提前查询

每次向数据库插入数据之前,会先根据该全局的查询在数据库中是否已经存在,
如果已经存在的情况下,则不会继续插入。

方案1:加锁 效率非常低,将程序变为单线程执行。
在这里插入图片描述

方案2:根据全局的id,在数据库设置一个唯一主键约束

单个请求时间2s,重试3次请求。3个线程会在sleep(7000)阻塞后,还是会在数据库插入3条重复请求。
在这里插入图片描述

增加唯一约束,数据库设为主键保证唯一性,结果只能插入一次,后面2次都是插入失败。

在这里插入图片描述
在这里插入图片描述

2. 接口的类型是为update的情况下:

建议使用乐观锁机制版本号码控制。

ABA问题
第一次 修改name= lvhy

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

3. 接口类型是delete情况下:逻辑删除 实际上都是修改状态。

与update类型一样思想。

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值