Feign中使用hystrix
在前面Feign整合Ribbon负载均衡的基础上(Feign整合Ribbon负载均衡),Feigin再整合Hystrix断路
一、backend_show_consumer工程
该工程的依赖如下

1、工程中的application.yml中增加配置
feign:
hystrix:
enabled: true

2、增加接口ProviderApi,对应backend_show_provider中的提供的两个接口
@FeignClient(name = "hello-service-provider",
path = "/provider",
fallback = ProviderFallbackAPIImpl.class
public interface ProviderApi { @RequestMapping(value = "/sayhello")
String invokerProviderController(@RequestParam("message")String message); @RequestMapping(value = "/{providerId}/sayhello", method = RequestMethod.POST)
String invokerProvider(
@RequestHeader("author") String author,
@PathVariable("providerId") String providerId,
@RequestBody UserModel json);
}
设置fallback = ProviderFallbackAPIImpl.class
3、降级实现:ProviderFallbackAPIImpl类
//降级实现
@Component
public class ProviderFallbackAPIImpl implements ProviderApi {
@Override
public String invokerProviderController(String message) {
return "invokerProviderController fallback message=" +message;
} @Override
public String invokerProvider(String author, String providerId, UserModel json) {
return "invokerProvider fallback auth=" +author + ",providerId=" + providerId +",json=" +json;
}
4、Controller方法
@Slf4j
@RestController
public class ConsumerController { @Resource
private ConsumerServiceAPI serviceAPI; @Resource
private ProviderApi providerApi; @RequestMapping(value = "/sayhello/feign")
public String sayHelloFeign(String message){
System.out.println("feign message=" + message);
return providerApi.invokerProviderController(message);
} @RequestMapping(value = "/sayhello/post")
public String sayHelloPost( String author,
String providerId,
UserModel json){
log.info("author:{},providerId;{}, userModel:{}", author, providerId, json); return providerApi.invokerProvider(author, providerId, json);
} @RequestMapping(value = "/sayhello")
public String sayHello(String message){
return serviceAPI.sayHello(message);
} }
二、启动eureka服务(略)
三、启动backend_show_provider
四、测试
1、此时访问正常

或者

此时说明Feign整合Ribbon负载均衡器
2、停止backend_show_provider服务,这样backend_show_customer访问backend_show_provider就会超时,触发熔断

此时说明Feign整合Hystrix断路器
五、另外一种实现方式fallbackFactory
1、增加fallbackFactory配置

2、FallbackFactory 实现如下
@Component
public class FallbackFactory implements feign.hystrix.FallbackFactory {
@Override
public ProviderApi create(Throwable throwable) {
return new ProviderApi() {
@Override
public String invokerProviderController(String message) {
return "invokerProviderController FallbackFactory message=" +message;
} @Override
public String invokerProvider(String author, String providerId, UserModel json) {
return "invokerProvider FallbackFactory auth=" +author + ",providerId=" + providerId +",json=" +json; }
};
}
}
3、调用

Feign中使用hystrix的更多相关文章
- spring cloud中使用hystrix实现回退
在微服务架构中,我们的服务被拆分成多个微服务,每个微服务完成自己的职责,微服务之间通过rpc或http进行调用.这个时候我们就要确保我们的服务高可用,但谁也说不准我们的服务能永远快速的提供服务.假如现 ...
- SpringCloud 在Feign上使用Hystrix(断路由)
SpringCloud 在Feign上使用Hystrix(断路由) 第一步:由于Feign的起步依赖中已经引入了Hystrix的依赖,所以只需要开启Hystrix的功能,在properties文件中 ...
- feign中开启熔断的书写步骤
/** 1.在pom.xml中引入依赖 2.在application.yaml中开启hystrix 3.在方法上配置熔断类 4.书写接口的实现类 **/ //1.在pom.xml中引 ...
- Spring Boot和Feign中使用Java 8时间日期API(LocalDate等)的序列化问题【转】
Spring Boot和Feign中使用Java 8时间日期API(LocalDate等)的序列化问题 http://blog.didispace.com/Spring-Boot-And-Feign- ...
- spring Cloud中,解决Feign/Ribbon整合Hystrix第一次请求失败的问题?
Spring Cloud中,Feign和Ribbon在整合了Hystrix后,可能会出现首次调用失败的问题,要如何解决该问题呢? 造成该问题的原因 Hystrix默认的超时时间是1秒,如果超过这个时间 ...
- Spring Boot中使用Feign调用时Hystrix提示异常:"could not be queued for execution and no fallback available."以及"Rejected command because thread-pool queueSize is at rejection threshold"
说明: 1.我还没有真正理解Spring Cloud的精髓,现只停留在使用阶段,可能存在分析不到位的问题. 1.这个是由于线程池的最大数量导致的,官方说随着线程池的数量越大,资源开销也就越大,所以调整 ...
- feign中的hytrix和turbin配置
这里我用了两个生产者和两个消费者进行演示,如下图(画的不好看,凑活看看): 这里我就只讲下怎么注册到dashbord和相关的配置,提供者和消费者等代码可以去下载查看: https://github.c ...
- 在Feign中添加自定义配置
首先先创建一个FeignConfig类,代码如下: package com.xing.config; import org.springframework.context.annotation.Bea ...
- springcloud feign增加熔断器Hystrix
1.依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>s ...
随机推荐
- DAY13 迭代器与生成器
一.迭代器 定义:器:包含了多个值的容器 迭代:循环反馈(一次从容器中取出一个值) 迭代器:从装有多个值的容器中一次取出一个值给外界 优点:不依赖索引,完成取值 缺点:不能计算长度,不能指定位取值(只 ...
- 《HTTP 权威指南》笔记:第十四章 安全 HTTP
 HTTPS 与 HTTP 不同,其在传输层与应用层之间添加了一个 SSL/TLS 的安全层.机制:所有的 HTTP 请求与响应都要通过 SSL/TLS 先进行加密,再进行传输. 基础知识 密码 c ...
- C#Windows窗体中添加了AxWindowsMediaPlayer的详细用法影响键盘操作的问题
最近在写一个飞机大战游戏,但在为游戏背景添加声音的时候,发现添加了AxWindowsMediaPlayer的详细用法音乐控件不能再通过键盘控制飞机的移动了,在网上查了许久,没找到原因,差点就想去找老师 ...
- 在Eclipse下搭建Hibernate框架(加载hibernate工具插件,离线)
下载hibernate工具包完成之后,对其进行解压可以得到众多文件夹,其中就有一个jbosstools-hibernate开头的文件夹,进入其中可以得到features和plugins两个文件夹,在E ...
- STL 小白学习(5) stack栈
#include <iostream> #include <stack> //stack 不遍历 不支持随机访问 必须pop出去 才能进行访问 using namespace ...
- 泥瓦工vps
http://blog.sina.com.cn/s/blog_16a3cb7cb0102xbvd.html
- 【转载】Spring Cloud全家桶主要组件及简要介绍
https://blog.csdn.net/xlgen157387/article/details/77773908
- 【Java集合系列三】Vector-Stack解析
2017-07-29 12:59:14 一.简介 1.Vector继承关系 2.Vector类扩容 Vector类的实现和ArrayList极其相似,都使用数组存储元素,但是扩容策略不一样,Array ...
- JDBC遇到向ORACLE数据库表执行插入操作时,报错“列在此处不允许”
此异常的原因在于,编写的SQL语句,其中的变量已经成了字符串,这种情况对数值类数据没有影响,但是对字符串类数据有影响,应该在SQL语句中的字符串类变量左右两边加上单引号.如下:
- Linux:CentOS 7系统的安装
相信有看过我写的博文就知道我写的第一篇博文就是CentOS 7系统的安装,不过是在虚拟机中安装的,而且还是直接加载镜像文件进去的,不过这次我就通过PE来安装,来证实下PE是否可以用来安装Linux系统 ...