SpringCloud之OpenFeign
1.OpenFignOpenFeign 是⼀个声明式远程调⽤客户端核心是注解驱动、零代码实现 HTTP 调用。2.远程调用-业务API订单服务通过RestTemplate或OpenFeign向商品服务发起远程调用自动完成负载均衡分发到多实例商品服务。商品服务匹配接口返回Product响应模型订单服务获取结果完成调用。2.1 引入依赖2.2 在OrderApplicatipn中EnableFeignClients 开启Fegin远程调用功能2.3编写客户端接口ProductFeignClient注EnableFeignClientsEnableFeignClients(basePackages com.example.clients)3. 远程调用-第三方API这是一个第三方API的调用实例包含请求信息以及响应结果3.1编写接口WeatherFeignClient3.2写好客户端后可以写一个单元测试测试是否能拿到数据WeatherTest4.小技巧:如何编写好OpenFeign声明式的远程调用接口业务API直接复制对方Controller签名即可第三方API根据接口文档确定请求如何发5.经典面试题客户端负载均衡与服务端负载均衡区别答客户端负载均衡客户端自己 “挑” 服务实例适合微服务内部远程调用OpenFeign 典型场景。服务端负载均衡统一 “中间人” 负责分发请求客户端只知道入口。6.进阶配置--日志OpenFeign日志作用是打印微服务远程调用的详细请求 / 响应信息方便调试排错。开启日志feignLoggerLevel在RestTemplateConfig中7.进阶配置--超时控制OpenFeign 远程调用的超时控制机制核心是限时等待 中断保护避免系统无限阻塞。订单服务通过 OpenFeign 调用商品服务API设置等待时间若商品服务宕机 / 连接不上或接口响应慢不返回进入超时判断connectTimeout连接超时A 服务与 B 服务建立连接阶段的最大等待时间示例为 10 秒超时则中断连接对应流程的第 1 步。readTimeout读取超时连接建立后A 服务等待 B 服务处理业务并返回数据的最大等待时间示例为 60 秒超时则中断读取对应流程的第 3、4 步。超时控制配置8.进阶配置--重试操作重试操作默认最多发送请求5次超过5次返回错误结果9.进阶配置--拦截器请求拦截器RequestInterceptor订单服务通过 OpenFeign 发起调用时请求会先经过请求拦截器可统一修改 / 定制请求比如添加X-Token等请求头再转发给商品服务。响应拦截器ResponseInterceptor商品服务返回响应时响应会先经过响应拦截器可做统一预处理比如统一处理异常、封装响应格式再返回给订单服务。9.1编写拦截器TokenRequestInterceptor9.2要使拦截器生效有两种方法第一种在application-feign.yml中编写request-interceptors。第二种方法在TokenRequestInterceptor中加入组件Component9.3在ProductController中可以获取请求头看到X-token10.进阶配置--FallbackFallback 给 OpenFeign 调用加了 “安全网”远程调用失败时用兜底数据兜底避免服务雪崩订单服务通过 OpenFeign 调用商品服务 API 时正常情况直接返回远程服务的真实结果异常情况超时 / 错误 / 服务宕机可选择返回错误信息或触发 Fallback 兜底回调返回预设的兜底数据避免系统阻塞10.1 引入sentinel10.2开启熔断10.3编写fallback函数