Feign使用Hystrix开发步骤

1、导入依赖spring-cloud-starter-hystrix

2、消费启动类开启@EnableCircuitBreaker

3、配置yml文件feign.hystrix.enabled=true

4、实现FeignClient接口或FallbackFactory接口
4.1、实现FeignClient接口
4.2、实现FallbackFactory接口

5、@FeignClient注解配置fallback参数

1、导入依赖spring-cloud-starter-hystrix

<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>

2、消费启动类开启@EnableCircuitBreaker

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@EnableHystrix //开启Hystrix支持
public class RibbonConsumerApplication { public static void main(String[] args) {
SpringApplication.run(RibbonConsumerApplication.class, args);
} }

3、配置yml文件feign.hystrix.enabled=true

server:
port: 8808
feign:
hystrix:
#开启feign的hystrix支持,默认是false
enabled: true

4、实现FeignClient接口或FallbackFactory接口
4.1、实现FeignClient接口
TestClient1.java

//fallback 指定一个回退类,这个类必须实现@FeignClient声明的接口,并且在spring context中
@FeignClient(value="cloud-producer",
configuration=FeignClientsConfiguration.class,
fallback=TestClient1FallBack.class)
public interface TestClient1 { @GetMapping(value = "/get/{id}")
public String get(@PathVariable("id") String id); @RequestMapping(value = "/getuser/{id}")
public User getUser(@PathVariable("id") String id); @RequestMapping(value = "/getuser2", method = RequestMethod.GET)
public User getUser2(User user); @RequestMapping(value = "/postuser")
public User postUser(@RequestBody User user); @RequestMapping(value = "/postuser")
public User postUser2(User user); @RequestMapping(value = "/postuser", method = RequestMethod.GET)
public User postUser3(User user); @GetMapping(value = "/listAll")
List<User> listAll(); }

TestClient1FallBack.java

@Component
public class TestClient1FallBack implements TestClient1 {
@Override
public String get(String id) {
return "feign hystrix fallback for get method";
} @Override
public User getUser(String id) {
User errorUser = new User();
errorUser.setId("getUser.errorId");
errorUser.setName("getUser.errorName");
return errorUser;
} @Override
public User getUser2(User user) {
User errorUser = new User();
errorUser.setId("getUser2.errorId");
errorUser.setName("getUser2.errorName");
return errorUser;
} @Override
public User postUser(User user) {
User errorUser = new User();
errorUser.setId("postUser.errorId");
errorUser.setName("postUser.errorName");
return errorUser;
} @Override
public User postUser2(User user) {
User errorUser = new User();
errorUser.setId("postUser2.errorId");
errorUser.setName("postUser2.errorName");
return errorUser;
} @Override
public User postUser3(User user) {
User errorUser = new User();
errorUser.setId("postUser3.errorId");
errorUser.setName("postUser3.errorName");
return errorUser;
} @Override
public List<User> listAll() {
User errorUser = new User();
errorUser.setId("listAll.errorId");
errorUser.setName("listAll.errorName");
ArrayList<User> list = new ArrayList<User>();
list.add(errorUser);
return list;
}
}

Test1Controller.java

@RestController
public class Test1Controller { @Autowired
private TestClient1 testClient1; @GetMapping("/feign1/get/{id}")
public String get(@PathVariable String id) {
String result = testClient1.get(id);
return result;
} @GetMapping("/feign1/getuser/{id}")
public User getUser(@PathVariable String id) {
User result = testClient1.getUser(id);
return result;
} @GetMapping("/feign1/getuser2")
public User getUser2(User user) {
User result = testClient1.getUser2(new User());
return result;
} @GetMapping("/feign1/listAll")
public List<User> listAll() {
return testClient1.listAll();
} @PostMapping("/feign1/postuser")
public User postUser(@RequestBody User user) {
User result = testClient1.postUser(user);
return result;
} @PostMapping("/feign1/postuser2")
public User postUser2(@RequestBody User user) {
User result = testClient1.postUser2(user);
return result;
} @PostMapping("/feign1/postuser3")
public User postUser3(@RequestBody User user) {
User result = testClient1.postUser3(user);
return result;
} }

4.2、实现FallbackFactory接口
TestClient3.java

//fallbackFactory 指定一个fallback工厂,与指定fallback不同, 此工厂可以用来获取到触发断路器的异常信息,TestClientFallbackFactory需要实现FallbackFactory类
@FeignClient(value="mima-cloud-producer",configuration=FeignClientsConfiguration.class,fallbackFactory=TestClien3tFallbackFactory.class)
public interface TestClient3 { @RequestMapping(value="/get/{id}",method=RequestMethod.GET)
public String get(@PathVariable("id") String id); @RequestMapping(value = "/getuser/{id}")
public User getUser(@PathVariable("id") String id); }

TestClien3tFallbackFactory.java——优点是可以获取到异常信息

//FallbackFactory的优点是可以获取到异常信息
@Component
public class TestClien3tFallbackFactory implements FallbackFactory<TestClient3> { @Override
public TestClient3 create(Throwable cause) {
return new TestClient3() {
@Override
public String get(String id) {
return "get trigger hystrix open! reason:"+cause.getMessage();
} @Override
public User getUser(String id) {
User errorUser = new User();
errorUser.setId("getUser.errorId");
errorUser.setName("getUser.errorName");
return errorUser;
}
};
} }

Test3Controller.java

@RestController
public class Test3Controller { @Autowired
private TestClient3 testClient3; @GetMapping("/feign3/get/{id}")
public String get(@PathVariable String id) {
String result = testClient3.get(id);
return result;
} @GetMapping("/feign3/getuser/{id}")
public User getuser(@PathVariable String id) {
User result = testClient3.getUser(id);
return result;
} }

5、@FeignClient注解配置fallback参数

Feign使用Hystrix的更多相关文章

  1. 在dropwizard中使用feign,使用hystrix

    前言 用惯了spring全家桶之后,试试dropwizard的Hello World也别有一帆风味.为了增强对外访问API的能力,需要引入open feign.这里简单在dropwizard中使用fe ...

  2. SpringCloud Feign对Hystrix(断路由)的支持

    第一步:首先开启Feign对Hystrix的支持,在properties文件中添加以下配置: feign.hystrix.enabled=true. 第二步:在上一篇Feign的基础上添加Hystri ...

  3. Feign 与 Hystrix

    Feign 与 Hystrix Feign是一个声明式的web服务客户端,它使得web服务调用非常的简单,当我们使用Feign时,Spring Cloud 整合了Ribbon和Eureka,从而为我们 ...

  4. spring cloud: Hystrix(四):feign类似于hystrix的断容器功能:fallback

    spring cloud: Hystrix(四):feign使用hystrix @FeignClient支持回退的概念:fallback方法,这里有点类似于:@HystrixCommand(fallb ...

  5. Spring Cloud(Dalston.SR5)--Feign 与 Hystrix 断路器整合

    创建项目 要使 Feign 与 Hystrix 进行整合,我们需要增加 Feign 和 Hystrix 的依赖,修改 POM.xml 中增加以下依赖项如下: <?xmlversion=" ...

  6. springcloud微服务实战:Eureka+Zuul+Feign/Ribbon+Hystrix Turbine+SpringConfig+sleuth+zipkin

    相信现在已经有很多小伙伴已经或者准备使用springcloud微服务了,接下来为大家搭建一个微服务框架,后期可以自己进行扩展.会提供一个小案例: 服务提供者和服务消费者 ,消费者会调用提供者的服务,新 ...

  7. springcloud(九)-Feign使用Hystrix

    前言 上一篇我们使用注解@HystrixCommond的fallbackMethod属性实现回退.然而,Feign是以接口形式工作的,它没有方法体,上一篇讲解的方式显然不适用于Feign. 那么Fei ...

  8. 004声明式服务调用Feign & 断路器Hystrix

    1.POM配置 和普通Spring Boot工程相比,添加了Eureka Client.Feign.Hystrix依赖和Spring Cloud依赖管理 <dependencies> &l ...

  9. SpringCloud系列十六:Feign使用Hystrix

    1. 回顾 上文讲解了使用注解@HystrixCommand的fallbackMethod属性实现回退.然而,Feign是以接口形式工作的, 它没有方法体,前文讲解的方式显然不适用与Feign. 事实 ...

随机推荐

  1. windows内核对象管理学习笔记

    目前正在阅读毛老师的<windows内核情景分析>一书对象管理章节,作此笔记. Win内核中是使用对象概念来描述管理内核中使用到的数据结构.此对象(Object)均是由对象头(Object ...

  2. Netsharp总体设计

    阅读本文请先阅读如下两篇文章 什么是企业软件 Netsharp什么 Netsharp总体设计 1.1     Netsharp终端形式 Netsharp基于.NET平台,支持的产品形态有三种: 北极熊 ...

  3. 用windows性能监视器检测sqlserver 常见指标

    转载地址:https://www.cnblogs.com/xdong/p/4296072.html

  4. Linux环境下java开发环境搭建二 tomcat搭建

    第一步:下载安装包并解压 # tar zxvf 压缩包名 第二步:把解压出的文件移动到/usr/local/tomcat7中 #mv 解压出来的文件夹  /usr/local/tomcat7 第三步: ...

  5. 20175316盛茂淞 2018-2019-2 《Java程序设计》第3周学习总结

    20175316盛茂淞 2018-2019-2 <Java程序设计>第3周学习总结 教材学习内容总结 1.1.编程语言的几个发展阶段: 面向机器语言 面向过程语言 面向对象语言 2.1.类 ...

  6. Java 浮点数相加

    刚刚遇到个需求,需要对金额求和,上线的时候才知道这时个,这个字段是个小数. 随手就改了个Double ,然后,跑下,没啥问题,直接上线了 然后,就fuck 了 加出一大堆的小数,大概是这样的 pack ...

  7. 读书笔记之Linux系统编程与深入理解Linux内核

    前言 本人再看深入理解Linux内核的时候发现比较难懂,看了Linux系统编程一说后,觉得Linux系统编程还是简单易懂些,并且两本书都是讲Linux比较底层的东西,只不过侧重点不同,本文就以Linu ...

  8. Real World Parsec --- 一个简便易学的 解释器

    学习链接如下: http://bms.tratao.com/desktop/doc/0c3802e4ee404a71407f34996eff98ef 另外的解析器 ANTLR,学过一阵子,比较难,没应 ...

  9. vs2015 打开项目自动运行 npm install

    问题:VS2015(visual studio 2015) 打开项目自动运行  npm install 解决办法: 打开工具-选项-项目与解决方案--外部web工具   去掉npm勾选 还有如果文件g ...

  10. MVC+EF CODE FIRST的使用

    1创建标准MVC项目 2通过NuGet安装EF 3在Models文件夹中编写实体类 4创建EFDB上下文类 5在webconfig中创建连接字符串,其中name=EFDB上下文类名 6通过管理控制台执 ...