Feign相关内容
微服务架构中声明式的HTTP客户端。核心作用是简化服务间调用通过接口注解定义远程调用Feign接口使用FeignClient注解。启动类使用EnableFeignClients注解。原理feign是一个声明式http客户端。在启动类上加上EnableFeignClients注解。spring启动后扫描带有FeignClient注解的接口通过JDK动态代理生成实现类。调用接口方法时feign把注解解析成HTTP请求通过loadBalance进行负载均衡最终发起远程调用如何传递header通过方法参数RequestHeader注解或者拦截器第一次调用慢很多对象和资源都是在第一次调用时初始化的创建feign动态代理初始化负载均衡器拉取服务器列表建立http连接池Feign 超时如何处理我会从 调用链、服务端、客户端配置、HTTP 客户端选型 四个层面来排查。第一先看日志和异常类型区分是 ConnectTimeout 还是 ReadTimeout。第二排查被调用方模块 B看接口 RT、CPU、线程池、慢 SQL确认是不是服务端本身慢。如果服务端本身就慢单纯调大 Feign 超时时间是治标不治本。第三检查 Feign 的配置包括 connectTimeout 和 readTimeout是否设置过小。在 Spring Cloud 2023 中Feign 默认使用的是 HttpURLConnection生产环境我一般会替换为OkHttp并开启连接池提升性能。第四结合业务场景评估是否需要调大超时时间。如果是偶发抖动我会适当调大如果是常态慢我会推动下游服务优化而不是一味放大超时时间避免线程被长时间占用。此外生产环境我们一般使用fallbackFactory既能兜底又能记录异常日志。