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. 事实 ...
随机推荐
- springboot + @KafkaListener 手动提交及消费能力优化
转载 https://blog.csdn.net/asd5629626/article/details/82776450 https://blog.csdn.net/asd5629626/artic ...
- Python开发——数据类型【字符串格式化】
字符串格式化之——% # 字符串格式化 msg = 'I am %s , My hobby is %s'%('yuan','play') print(msg) # I am yuan , My hob ...
- 状态机学习(六)解析JSON2
来自 从零开始的 JSON 库教程 从零开始教授如何写一个符合标准的 C 语言 JSON 库 作者 Milo Yip https://zhuanlan.zhihu.com/json-tutorial ...
- Vc 检测内存泄漏
启用内存泄漏检测 检测内存泄漏是 C/c + + 调试器和 C 运行时库 (CRT) 的主要工具调试堆函数. 若要启用调试堆的所有函数,在 c + + 程序中,按以下顺序包含以下语句: C++复制 # ...
- C# 多线程编程,传参,接受返回值
C# 多线程编程,传参,接受返回值 今天将多线程的知识有回顾了下,总结了几点: 新建一个线程(无参数,无返回值) Thread th = new Thread(new ThreadStart(Prin ...
- 别人的Linux私房菜(6)文件权限与目录配置
账号与一般身份用户存放在/etc/passwd文件中 个人密码存放在/etc/shadow文件中 Linux所有组名存放在/etc/group中 ls -al查看所有信息并显示权限等 文件权限的10字 ...
- python 更换 版本
这是一个悲伤的安装ipython的过程. 写下来留个教训吧. 也是希望对博友一些帮助吧. 注: 我也写了一篇window下安装bpython的文章(个人感觉bpython要比ipython强大的多), ...
- 7. The British Thached Roof 英国的茅草屋顶
7. The British Thached Roof 英国的茅草屋顶 (1) The view over a valley of a tiny village with thatchd roof c ...
- python模块:json
r"""JSON (JavaScript Object Notation) <http://json.org> is a subset of JavaScri ...
- apache、nginx、tomcat配置方法
https://www.cnblogs.com/chenmh/p/5121830.html