Feign的配置

Ribbon的配置

1 全部配置

ribbon.=

ribbon.ConnectTimeout=500  //客户端的连接超时设置为500毫秒

ribbon.ReadTimeout=500  //客户端的读取超时设置为500毫秒

 

2 指定服务配置,client是@FeignClient(name="hello-service")的hello-service,使用@FeignClient来创建Feign客户端的时候,同时也创建了一个名为hello-service的ribbon的客户端。

.ribbon.=

hello-service.ribbon.ConnectTimeout=500

3 Feign默认实现了重试机制,重试的配置 .ribbon.=  配置如下

hello-service:
  ribbon:
    #配置单个节点重试最大值
    MaxAutoRetries: 1
    #配置更换节点数最大值
    MaxAutoRetriesNextServer: 2
    #链接超时时间
    ConnectTimeout: 500
    #请求处理时间
    ReadTimeout: 2000
    #每个操作都开启重试机制
    OkToRetryOnAllOperations: true
 

注意:Ribbon的超时和Hystrix的超时是两个概念,Hystrix超时应该大于Ribbon的超时,否则Hystrix超时后,该命令直接熔断,重试机制没任何意义。

Hystrix的配置

全局配置,比如设置全局的超时时间5000毫秒

 hystrix.command.defalut.execution.isolation.thread.timeoutInMilliseconds=5000

 

指定命令配置

hystrix.command.作为前缀,默认是采用Feign的客户端的方法名字作为标识

hystrix.command.hello.execution.isolation.thread.timeoutInMilliseconds=5000

 

服务降级配置

 

1 降级的实现逻辑只需要为Feign客户端编写一个具体的接口实现类

 

@Component
public class HelloServiceFallback implements HelloService {

    @Override
    public String hello() {
         
        return "error hello()";
    }

    @Override
    public String  hello3(@RequestParam("name") String name )  {
         
        return "error hello3(String name ) ";
    }

    @Override
    public User  hello5(@RequestHeader("name") String name,@RequestHeader("age") int  age ){
        return new User("hello5",0);
    }

    @Override
    public String  hello6(@RequestBody User user ){
         
        return "error hello6(  User user )";
    }

    @Override
    public User  hello7(@PathVariable("name") String name,@PathVariable("age") int age){
         
              return new User("hello7",0);
    }

}

 

 2 在服务绑定接口HelloService中,通过@FeignClient注解的fallback属性来指定对应的服务降级实现类

@FeignClient(name="hello-service",fallback=HelloServiceFallback.class)
public interface HelloService {
    
@RequestMapping("/hello")
String hello();

@RequestMapping("/hello3")
public String  hello3(@RequestParam("name") String name )  ;

@RequestMapping("/hello5")
public User  hello5(@RequestHeader("name") String name,@RequestHeader("age") int  age )  ;

@RequestMapping("/hello6")
public String  hello6(@RequestBody User user )  ;

@RequestMapping("/hello7/{name}/{age}")
public User  hello7(@PathVariable("name") String name,@PathVariable("age") int age) ;
}

3 验证

  关于服务端的应用,访问http://127.0.0.1:9001/feign-consumer地址,会直接触发服务降级,返回服务降级实现类的内容。

Feign的配置_第1张图片

日志配置

Spring  Cloud Feign在构建@FeignClient注解修饰的服务客户端的时候,会为每一个客户端都创建feign.Logger 实例,我们可以利用该日志对象DEBUG模式来帮助分析Feign的请求细节。

1 的参数配置格式来开启指定Feign客户端的DEBUG日志,FeignClient是Feign客户端定义的接口完整路径

logging:
  level:
       feign.consumer.feignconsumer: DEBUG

2 实现配置类,来指定Feign客户端来实现不同的日志级别

@Configuration
public class FeignLogConfiguration {
  @Bean
  Logger.Level feignLoggerLevel() {
    return Logger.Level.FULL;
  }
}

也可以针对全局的日志级别,所有Feign客户端都用这个日志级别

@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class FeignConsumerApplication {

    public static void main(String[] args) {
        SpringApplication.run(FeignConsumerApplication.class, args);
    }

      @Bean
      Logger.Level feignLoggerLevel() {
        return Logger.Level.FULL;
      }
}
 

 

3 Feign客户端引用该日志配置

@FeignClient(name="hello-service",fallback=HelloServiceFallback.class,configuration=FeignLogConfiguration.class)
public interface HelloService {
    
@RequestMapping("/hello")
String hello();

。。。。。

}

 

 

4 验证,访问http://127.0.0.1:9001/feign-consumer,可以看到控制台打印结果如下,有请求的详细日志

Feign的配置_第2张图片

 

Feign的Looger级别有下面4类

1 None:不记录任何信息

2 BASIC:仅记录请求方法,URL,响应状态码和执行时间

3 HEADERS:除了记录BASIC级别的信息之外,还会记录头信息

4 FULL:记录请求和相应的所有明细

 

 

 

你可能感兴趣的:(SpringCloud)