3千字详细讲解OpenFeign的使用姿势( 三 )
最后启动测试 , 可以看到 , 超过1秒也能请求成功 。
文章插图
4.2 日志打印功能首先需要配置Feign的打印日志的级别 。
@Configurationpublic class FeignConfig {/*** NONE:默认的 , 不显示任何日志* BASIC:仅记录请求方法、URL、响应状态码及执行时间* HEADERS:出了BASIC中定义的信息之外 , 还有请求和响应的头信息* FULL:除了HEADERS中定义的信息之外 , 还有请求和响应的正文及元素*/@Beanpublic Logger.Level feginLoggerLevel() {return Logger.Level.FULL;}}
第二步 , 需要设置打印的Feign接口 。 Feign为每个客户端创建一个logger 。 默认情况下 , logger的名称是Feigh接口的完整类名 。 需要注意的是 , Feign的日志打印只会对DEBUG级别做出响应 。
#与server同级logging:level:com.yehongzhi.springcloud.consumer.feign.ProviderClient: debug
设置完成后 , 控制台可以看到详细的请求信息 。
文章插图
4.3 Feign实现熔断openFeign实际上是已经引入了hystrix的相关jar包 , 所以可以直接使用 , 设置超时时间 , 超时后调用FallBack方法 , 实现熔断机制 。
首先在消费者工程添加Maven依赖 。
第二步 , 在配置中开启熔断机制 , 添加超时时间 。
#默认是不支持的 , 所以这里要开启 , 设置为truefeign:hystrix:enabled: truehystrix:command:default:execution:isolation:thread:timeoutInMilliseconds: 3000
第三步 , 编写FallBack类 。
//ProviderClient是贴了@FeignClient注解的接口@Componentpublic class ProviderClientFallBack implements ProviderClient {@Overridepublic String list() {return Arrays.asList("调用fallBack接口", "返回未知结果").toString();}}
第四步 , 在对应的Feign接口添加fallback属性 。
//fallback属性 , 填写刚刚编写的FallBack回调类@Component@FeignClient(name = "provider", fallback = ProviderClientFallBack.class)public interface ProviderClient extends ProviderApi {}
最后可以测试一下 , 超过设置的3秒 , 则会熔断 , 调用FallBack方法返回 。
文章插图
4.4 设置负载均衡前面说过OpenFeign底层是使用Ribbon , Ribbon是负责做负载均衡的组件 。 所以是可以通过配置设置负载均衡的策略 。
默认的是轮询策略 。 如果要换成其他策略 , 比如随机 , 怎么换呢 。
很简单 , 改一下配置即可:
#服务名称provider:ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule#NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #配置规则 随机#NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule #配置规则 轮询#NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RetryRule #配置规则 重试#NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule #配置规则 响应时间权重#NFLoadBalancerRuleClassName: com.netflix.loadbalancer.BestAvailableRule #配置规则 最空闲连接策略
总结OpenFeign把RestTemplete , Ribbon , Hystrix糅合在了一起 , 在使用时就可以更加方便 , 优雅地完成整个服务的暴露 , 调用等 。 避免做一些重复的复制粘贴接口URL , 或者重复定义接口等 。 还是非常值得去学习的 。
推荐阅读
- AirPods Max是如何低功耗运作的,来看详细说明
- 超好用的UnixLinux 命令技巧 大神为你详细解读
- 华为nova8系列详细配置曝光:66W快充+麒麟985芯片
- 放映机|NEC激光家族上线,实力讲解影院生存之路
- Python中字符串有哪些常用操作?纯干货超详细
- Corona6.1超详细安装步骤,全汉化最新CR版本
- 如何将电脑内容显示到投影仪或电视上?详细教程奉上
- 值得为了8K升级吗?天龙AVR-X4700H详细试用
- 老罗推荐的确有料,野小兽智能水阻划船机详细体验
- 程序员面试题:Leetcode真题讲解,求两数之和