1.OpenFeign介绍

  • Feign是Spring Cloud组件中的一个轻量级HTTP服务客户端,Feign内置了Ribbon,用来做客户端负载均衡。Feign使用注解定义接口,实现服务间通信,Feign本身不支持Spring MVC的注解,它有一套自己的注解。
  • OpenFeign是Spring Cloud 在Feign的基础上支持了Spring MVC的注解,如@RequesMapping等。OpenFeign的@FeignClient可以解析SpringMVC的@RequestMapping注解的接口,通过动态代理的方式实现服务间通信,并内置Ribbon实现客户端负载均衡的能力。

    2.开发步骤

  • 导入依赖


org.springframework.cloud
spring-cloud-starter-openfeign
  • 在启动类上添加注解

@SpringBootApplication@EnableFeignClients // 启用feign客户端@EnableDiscoveryClient

  • 开发接口,通过@FeignClient 注解定义调用的服务
    • value属性定义服务的ID
    • 请求的方式、URL、方法参数要与请求的接口一致

@FeignClient(value = “user-service”)
public interface UserServiceFeignClient {
@GetMapping(“/user/{id}”)
public CommonResult getUser(@PathVariable(“id”) int id);}
image.png

5.OpenFeign开启通信日志

(1)OpenFeign提供了日志打印功能,我们可以通过配置来调整日志级别,从而了解OpenFeign中Http请求的细节。
(2)日志级别

  • NONE:默认的,不显示任何日志;
  • BASIC:仅记录请求方法、URL、响应状态码及执行时间;
  • HEADERS:除了BASIC中定义的信息之外,还有请求和响应的头信息;
  • FULL:除了HEADERS中定义的信息之外,还有请求和响应的正文及元数据。

(3)配置日志级别
@Bean public Logger.Level loggerLevel(){ return Logger.Level.FULL; }
(4)在application.yml中配置需要开启日志的Feign客户端
logging: level: 客户端接口: debug

6.OpenFeign 配置

  • 请求重试user-service: #服务ID 针对某个具体服务的配置 ribbon: NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule OkToRetryOnAllOperations: false # true 对所有请求 get ,post,put ,delete等都进行重试,false 只针对get请求重试。 MaxAutoRetriesNextServer: 1 # 切换实例次数 MaxAutoRetries: 1 #切换实例后重试次数

    • 导入Spring Retry依赖
    • 开启重试日志: org.springframework.retry.support: debug
    • 配置重试的策略
  • 超时配置

    • 请求超时(连接超时)
    • 请求处理超时(业务处理超时)
  • image.png