扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这期内容当中小编将会给大家带来有关Spring Cloud中怎么配置Feign,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:空间域名、网络空间、营销软件、网站建设、王益网站维护、网站推广。
Ribbon配置
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
。
但是这种配置是一种全局配置,就是是对所有的请求生效的,如果我想针对不同的服务配置不同的连接超时和读取超时,那么我们可以在属性的前面加上服务的名字,如下:
# 设置针对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接口,那么可以按照下面这种写法,如下:
# 设置熔断超时时间 hystrix.command.hello.execution.isolation.thread.timeoutInMilliseconds=10000 # 关闭熔断功能 hystrix.command.hello.execution.timeout.enabled=false
但是我们的接口名可能会重复,这个时候同名的接口会共用这一条Hystrix配置。
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注解中指定服务降级处理类即可,如下:
@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; }
上述就是小编为大家分享的Spring Cloud中怎么配置Feign了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注创新互联行业资讯频道。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流