博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第七章:SpringCloud Feign对hystrix的支持
阅读量:6816 次
发布时间:2019-06-26

本文共 3473 字,大约阅读时间需要 11 分钟。

##方法一:设置fallback属性

Feign Hystrix Fallbacks 官网解释 Hystrix supports the notion of a fallback: a default code path that is executed when they circuit is open or there is an error. To enable fallbacks for a given @FeignClient set the fallback attribute to the class name that implements the fallback.

它说你想要给Feign fallback功能,就给@FeignClient注解设置fallback属性,并且回退类要继承@FeignClient所注解的接口

  • 官方实例:
@FeignClient(name = "hello", fallback = HystrixClientFallback.class)protected interface HystrixClient {    @RequestMapping(method = RequestMethod.GET, value = "/hello")    Hello iFailSometimes();}static class HystrixClientFallback implements HystrixClient {    @Override    public Hello iFailSometimes() {        return new Hello("fallback");    }}复制代码
  • 但是如果HystrixClientFallback类拿出去单独作为一个类的话,我们就得在该类上添加注解@Component

  • 最后访问feign端口7901调用的服务

    访问/health
    访问正常。

  • 然后我关闭user服务再进行访问

  • To disable Hystrix support for Feign, set feign.hystrix.enabled=false. 想关闭feign对hystrix的支持的话,在application里配置feign.hystrix.enabled=false.

To disable Hystrix support on a per-client basis create a vanilla Feign.Builder with the "prototype" scope, e.g.: 想要以每个Feign客户端为基础来禁用或开启Hystrix 请在需要禁用的类中添加

@Bean	@Scope("prototype")	public Feign.Builder feignBuilder() {		return Feign.builder();	}复制代码

原理:官网上有 Feign.Builder feignBuilder: HystrixFeign.Builder 说明了 Feign 默认是开启HystrixFeign的,默认Builder对象是HystrixFeign,我们在这里只Builder Feign,所以会达到禁用Hystrix的效果 ##方法二:设置fallfactory属性 **提示:**如果fallback默认优先级比fallfactory优先级高。所以二者都存在的话,会访问fallback的回退方法。 这里不做演示。 那么fallback和fallfactory有什么区别呢

不多哔哔,先看代码后加分析。

@FeignClient(name = "hello", fallbackFactory = HystrixClientFallbackFactory.class)protected interface HystrixClient {	@RequestMapping(method = RequestMethod.GET, value = "/hello")	Hello iFailSometimes();}@Componentstatic class HystrixClientFallbackFactory implements FallbackFactory
{ @Override public HystrixClient create(Throwable cause) { return new HystrixClientWithFallBackFactory() { @Override public Hello iFailSometimes() { return new Hello("fallback; reason was: " + cause.getMessage()); } }; }}复制代码

这是官网给的demo。我在这里把类都提了出来。 UserFeignClient 接口:

package com.fantj.moviefeign.feign;import com.fantj.fantjconsumermovie.entity.User;import feign.hystrix.FallbackFactory;import org.springframework.cloud.netflix.feign.FeignClient;import org.springframework.web.bind.annotation.*;/** * Created by Fant.J. * 2017/12/1 19:33 */@FeignClient(value = "provider-user3",fallbackFactory = HystrixFallbackFactory.class)public interface UserFeignClient {    @RequestMapping(value = "/simple/{id}",method = RequestMethod.GET)    User findById(@PathVariable("id") Long id);}复制代码

HystrixFallbackFactory 实现FallbackFactory接口

package com.fantj.moviefeign.feign;import com.fantj.fantjconsumermovie.entity.User;import feign.hystrix.FallbackFactory;import lombok.extern.slf4j.Slf4j;import org.springframework.stereotype.Component;/** * Created by Fant.J. * 2017/12/3 14:04 */@Component@Slf4jpublic class HystrixFallbackFactory implements FallbackFactory
{ @Override public UserFeignClient create(Throwable throwable) { log.info("fallback; reason was: " + throwable.getMessage()); return id -> { User user = new User(); user.setId(0L); return user; }; }}复制代码

注意我在重写create方法中把id返回值固定为0。如果它返回的id是0,证明fallbackfactory启用。

然后create方法中也有获取异常并打印日志。我们看下日志。提示我们访问被拒绝。(之前我手动把3
provider-user3服务停止)

#####fallback和fallfactory区别:

  • fallback只是重写了回退方法
  • fallfactory层面比较深,因为它可以调出底层异常

转载地址:http://zsczl.baihongyu.com/

你可能感兴趣的文章
[摘录]感受弗兰克尔的故事
查看>>
jmeter响应时间与postman响应时间为什么不一样?
查看>>
HTTPonly属性
查看>>
WindowsDriver_知识_点滴
查看>>
显示磁盘信息
查看>>
关于使用索引的一些经验
查看>>
基于spark和sparkstreaming的word2vec
查看>>
常用正则表达式爬取网页信息及HTML分析总结
查看>>
selenium关于断言的使用
查看>>
eclipse 安装properties编辑器,显示中文
查看>>
C++系统学习之五:表达式
查看>>
java 格式化日期(转)
查看>>
【转】Automated Testing and the Test Pyramid
查看>>
[转] Mac下MySql卸载方法
查看>>
浙大版《C语言程序设计(第3版)》题目集 练习4-6 猜数字游戏 (15 分)
查看>>
ORA-00845: MEMORY_TARGET not supported on this system
查看>>
HashTable原理与源码分析
查看>>
JPA多对一单向关联
查看>>
系统查看硬件相关信息命令
查看>>
sublime 3 text 中运行Java
查看>>