Feign使用Hystrix
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的更多相关文章
- 在dropwizard中使用feign,使用hystrix
前言 用惯了spring全家桶之后,试试dropwizard的Hello World也别有一帆风味.为了增强对外访问API的能力,需要引入open feign.这里简单在dropwizard中使用fe ...
- SpringCloud Feign对Hystrix(断路由)的支持
第一步:首先开启Feign对Hystrix的支持,在properties文件中添加以下配置: feign.hystrix.enabled=true. 第二步:在上一篇Feign的基础上添加Hystri ...
- Feign 与 Hystrix
Feign 与 Hystrix Feign是一个声明式的web服务客户端,它使得web服务调用非常的简单,当我们使用Feign时,Spring Cloud 整合了Ribbon和Eureka,从而为我们 ...
- spring cloud: Hystrix(四):feign类似于hystrix的断容器功能:fallback
spring cloud: Hystrix(四):feign使用hystrix @FeignClient支持回退的概念:fallback方法,这里有点类似于:@HystrixCommand(fallb ...
- Spring Cloud(Dalston.SR5)--Feign 与 Hystrix 断路器整合
创建项目 要使 Feign 与 Hystrix 进行整合,我们需要增加 Feign 和 Hystrix 的依赖,修改 POM.xml 中增加以下依赖项如下: <?xmlversion=" ...
- springcloud微服务实战:Eureka+Zuul+Feign/Ribbon+Hystrix Turbine+SpringConfig+sleuth+zipkin
相信现在已经有很多小伙伴已经或者准备使用springcloud微服务了,接下来为大家搭建一个微服务框架,后期可以自己进行扩展.会提供一个小案例: 服务提供者和服务消费者 ,消费者会调用提供者的服务,新 ...
- springcloud(九)-Feign使用Hystrix
前言 上一篇我们使用注解@HystrixCommond的fallbackMethod属性实现回退.然而,Feign是以接口形式工作的,它没有方法体,上一篇讲解的方式显然不适用于Feign. 那么Fei ...
- 004声明式服务调用Feign & 断路器Hystrix
1.POM配置 和普通Spring Boot工程相比,添加了Eureka Client.Feign.Hystrix依赖和Spring Cloud依赖管理 <dependencies> &l ...
- SpringCloud系列十六:Feign使用Hystrix
1. 回顾 上文讲解了使用注解@HystrixCommand的fallbackMethod属性实现回退.然而,Feign是以接口形式工作的, 它没有方法体,前文讲解的方式显然不适用与Feign. 事实 ...
随机推荐
- Quartz.Net进阶之二:关于触发器的更多信息
与作业一样,触发器相对容易使用,但是在您可以充分利用Quartz.NET之前,确实需要了解和理解各种可自定义的选项. 此外,如前所述,您可以选择不同类型的触发器来满足不同的调度需求. 1.常见触发器属 ...
- ORM初识和数据库操作
ORM简介 对象关系映射(Object Relational Mapping,简称ORM)模式是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术.简单的说,ORM是通过使用描述对象和数据库之 ...
- js原生的节点操作API
// yi获取元素节点 //一 :过id的方式( 通过id查找元素,大小写敏感,如果有多个id只找到第一个) document.getElementById('div1'); // 通过类名查找元素, ...
- Monotonic Array LT896
An array is monotonic if it is either monotone increasing or monotone decreasing. An array A is mono ...
- 《C#从现象到本质》读书笔记(五)第5章字符串第6章垃圾回收第7章异常与异常处理
<C#从现象到本质>读书笔记(五)第5章字符串 字符串是引用类型,但如果在某方法中,将字符串传入另一方法,在另一方法内部修改,执行完之后,字符串的只并不会改变,而引用类型无论是按值传递还是 ...
- STM32 + RC522(SPI2 和 模拟SPI)
STM32 + RC522(SPI2 和 模拟SPI) 一. STM32 + RC522(SPI2 模式) 1. 头文件: rc522.h #include "stm32f10x.h&quo ...
- MySQL安装及后续配置
rpm -qa | grep mysql 检查已安装的mysql版本 rpm -e --nodeps mysql-libs-5.1.71 卸载 tar -zxvf MySQL.tar.gz 解压 安 ...
- 修改chrome浏览器默认css样式的方法
最近重新用起了ubuntu kylin,然后又碰到之前让我感到有些难受的一个小问题:用chrome浏览部分网页时,一部分粗体字十分难看,就像是宋体直接加粗那样. 之前就觉得这样看起来很难受,但是找到的 ...
- [转]Ubuntu16.04下ralink rt3290驱动安装
出处:https://askubuntu.com/questions/253632/how-do-i-get-a-ralink-rt3290-wireless-card-working 解决为问题:L ...
- css概括2
Css内容: 常用样式:字体.颜色.背景... 字体:大小.颜色.粗细.字体 Text-decoration:文本修饰{overline 上 Underline 下 Line-throung 中} T ...