到目前为止,小伙伴们对Feign的使用已经掌握的差很少了,咱们在前文也提到Feign是对Ribbon和Hystrix的整合,那么在Feign中,咱们要如何配置Ribbon和Hystrix呢?带着这两个问题,咱们来看看本文的内容。json
本文是Spring Cloud系列的第十八篇文章,了解前十七篇文章内容有助于更好的理解本文: 缓存
1.使用Spring Cloud搭建服务注册中心
2.使用Spring Cloud搭建高可用服务注册中心
3.Spring Cloud中服务的发现与消费
4.Eureka中的核心概念
5.什么是客户端负载均衡
6.Spring RestTemplate中几种常见的请求方式
7.RestTemplate的逆袭之路,从发送请求到负载均衡
8.Spring Cloud中负载均衡器概览
9.Spring Cloud中的负载均衡策略
10.Spring Cloud中的断路器Hystrix
11.Spring Cloud自定义Hystrix请求命令
12.Spring Cloud中Hystrix的服务降级与异常处理
13.Spring Cloud中Hystrix的请求缓存
14.Spring Cloud中Hystrix的请求合并
15.Spring Cloud中Hystrix仪表盘与Turbine集群监控
16.Spring Cloud中声明式服务调用Feign
17.Spring Cloud中Feign的继承特性app
ribbon的配置其实很是简单,直接在application.properties中配置便可,以下:负载均衡
# 设置链接超时时间 ribbon.ConnectTimeout=600 # 设置读取超时时间 ribbon.ReadTimeout=6000 # 对全部操做请求都进行重试 ribbon.OkToRetryOnAllOperations=true # 切换实例的重试次数 ribbon.MaxAutoRetriesNextServer=2 # 对当前实例的重试次数 ribbon.MaxAutoRetries=1
这个参数的测试方式很简单,咱们能够在服务提供者的hello方法中睡眠5s,而后调节这个参数就能看到效果。下面的参数是咱们配置的超时重试参数,超时以后,首先会继续尝试访问当前实例1次,若是仍是失败,则会切换实例访问,切换实例一共能够切换两次,两次以后若是仍是没有拿到访问结果,则会报Read timed out executing GET http://hello-service/hello
。
可是这种配置是一种全局配置,就是是对全部的请求生效的,若是我想针对不一样的服务配置不一样的链接超时和读取超时,那么咱们能够在属性的前面加上服务的名字,以下:ide
# 设置针对hello-service服务的链接超时时间 hello-service.ribbon.ConnectTimeout=600 # 设置针对hello-service服务的读取超时时间 hello-service.ribbon.ReadTimeout=6000 # 设置针对hello-service服务全部操做请求都进行重试 hello-service.ribbon.OkToRetryOnAllOperations=true # 设置针对hello-service服务切换实例的重试次数 hello-service.ribbon.MaxAutoRetriesNextServer=2 # 设置针对hello-service服务的当前实例的重试次数 hello-service.ribbon.MaxAutoRetries=1
Feign中Hystrix的配置和Ribbon有点像,基础配置以下:测试
# 设置熔断超时时间 hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=10000 # 关闭Hystrix功能(不要和上面的配置一块儿使用) feign.hystrix.enabled=false # 关闭熔断功能 hystrix.command.default.execution.timeout.enabled=false
这种配置也是全局配置,若是咱们想针对某一个接口配置,好比/hello接口,那么能够按照下面这种写法,以下:spa
# 设置熔断超时时间 hystrix.command.hello.execution.isolation.thread.timeoutInMilliseconds=10000 # 关闭熔断功能 hystrix.command.hello.execution.timeout.enabled=false
可是咱们的接口名可能会重复,这个时候同名的接口会共用这一条Hystrix配置。 debug
OK,咱们以前还有一篇文章专门讲Hystrix服务降级的问题,那么在Feign中如何配置Hystrix的服务降级呢?很简单,新建一个类,实现HelloService接口,以下:日志
@Component public class HelloServiceFallback implements HelloService { @Override public String hello() { return "hello error"; } @Override public String hello(String name) { return "error " + name; } @Override public Book hello(String name, String author, Integer price) { Book book = new Book(); book.setName("error"); return book; } @Override public String hello(Book book) { return "error book"; } }
这里方法实现的逻辑都是相应的服务降级逻辑。而后在@FeignClient注解中指定服务降级处理类便可,以下:code
@FeignClient(value = "hello-service",fallback = HelloServiceFallback.class) public interface HelloService { @RequestMapping("/hello") String hello(); @RequestMapping(value = "/hello1", method = RequestMethod.GET) String hello(@RequestParam("name") String name); @RequestMapping(value = "/hello2", method = RequestMethod.GET) Book hello(@RequestHeader("name") String name, @RequestHeader("author") String author, @RequestHeader("price") Integer price); @RequestMapping(value = "/hello3", method = RequestMethod.POST) String hello(@RequestBody Book book); }
此时咱们只启动eureka-server和feign-consumer,而后访问相应的接口,能够看到以下结果(注意这里须要在application.properties中配置feign.hystrix.enabled=true,新版本(Dalston.SR3)的Spring Cloud Feign默认是关闭了Hystrix功能的):
Spring Cloud Feign支持对请求和响应进行GZIP压缩,以提升通讯效率,配置方式以下:
# 配置请求GZIP压缩 feign.compression.request.enabled=true # 配置响应GZIP压缩 feign.compression.response.enabled=true # 配置压缩支持的MIME TYPE feign.compression.request.mime-types=text/xml,application/xml,application/json # 配置压缩数据大小的下限 feign.compression.request.min-request-size=2048
Feign为每个FeignClient都提供了一个feign.Logger实例,咱们能够在配置中开启日志,开启方式很简单,分两步:
第一步:application.properties中配置日志输出
application.properties中配置以下内容,表示设置日志输出级别:
# 开启日志 格式为logging.level.+Feign客户端路径 logging.level.org.sang.HelloService=debug
第二步:入口类中配置日志Bean
入口类中配置日志Bean,以下:
@Bean Logger.Level feignLoggerLevel() { return Logger.Level.FULL; }
OK,如此以后,控制台就会输出请求的详细日志。
关于Feign中的配置咱们就说到这里,有问题欢迎小伙伴们留言讨论。
更多JavaEE资料请关注公众号: