1.RPC接口http请求
客户端向服务器端发送http请求,http请求基于请求与响应的,如果服务器端没有及时的响应请求给客户端的情况下,有可能会造成客户端会一直阻塞等待。
客户端调用服务器端接口的时候,会设置一个超时时间5s-10s 30s
如果服务器端处理客户端业务逻辑非常耗时
的情况下,应该改成mq异步
执行。
2.接口超时与接口调用不通区别?
接口响应超时
:服务器端实际上已经接受到客户端请求,服务器端没有及时响应请求给客户端
java.net.SocketTimeoutException: Read timed out
当客户端设置的超时时间<服务器端处理业务逻辑时间,就会发生重试
的策略。
调用不通
:服务器端已经为宕机状态
java.net.ConnectException: Connection refused: connect
3.如果重试多还是无法获取到响应结果请问如何处理?
- 限制
重试
的次数3次
;推荐 - 延长客户端调用服务器端接口超时时间;不推荐
- 改用
mq异步
执行;推荐
4.如何保证接口的幂等性问题
1. 接口实现做insert
类型的情况下 根据全局的id 提前查询
每次向数据库插入数据之前,会先根据该全局的查询在数据库中是否已经存在,
如果已经存在的情况下,则不会继续插入。
方案1:加锁 效率非常低
,将程序变为单线程
执行。
方案2:根据全局的id
,在数据库
中设置一个唯一主键约束
。
单个请求时间2s,重试3次请求。3个线程会在sleep(7000)阻塞后,还是会在数据库插入3条重复请求。
增加唯一约束,数据库设为主键保证唯一性,结果只能插入一次,后面2次都是插入失败。
2. 接口的类型是为update
的情况下:
建议使用乐观锁
机制版本号
码控制。
ABA问题
第一次 修改name= lvhy
3. 接口类型是delete
情况下:逻辑删除 实际上都是修改状态。
与update类型一样思想。