Ribbon的配置
1 全部配置
ribbon.
如
ribbon.ConnectTimeout=500 //客户端的连接超时设置为500毫秒
ribbon.ReadTimeout=500 //客户端的读取超时设置为500毫秒
2 指定服务配置,client是@FeignClient(name="hello-service")的hello-service,使用@FeignClient来创建Feign客户端的时候,同时也创建了一个名为hello-service的ribbon的客户端。
如
hello-service.ribbon.ConnectTimeout=500
3 Feign默认实现了重试机制,重试的配置
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.
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地址,会直接触发服务降级,返回服务降级实现类的内容。
日志配置
Spring Cloud Feign在构建@FeignClient注解修饰的服务客户端的时候,会为每一个客户端都创建feign.Logger 实例,我们可以利用该日志对象DEBUG模式来帮助分析Feign的请求细节。
1
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的Looger级别有下面4类
1 None:不记录任何信息
2 BASIC:仅记录请求方法,URL,响应状态码和执行时间
3 HEADERS:除了记录BASIC级别的信息之外,还会记录头信息
4 FULL:记录请求和相应的所有明细