springcloud之hystrix熔断器-Finchley.SR2版
本篇和大家分享的是springcloud-hystrix熔断器,其主要功能是对某模块调用失败做断路和降级,简单点就当某个模块程序出问题了并达到某阈值就限制后面请求,并降级的方式提供一个默认返回数据。最近在琢磨hystrix源码,琢磨思路写一个自己的简易熔断器,希望大家后期关注。
- springcloud版本说明
- hystrix可用于工作中场景
- springcloud-hystrix运用
- feign客户端使用hystrix
springcloud版本说明
由于市面上其版本比较多,版本不一可能造成了读者尝试时版本问题,所以这里指明当前作者写文章时使用的cloud版本
springboot版本:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0..RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
springcloud版本:
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Finchley.SR2</spring-cloud.version>
</properties>
hystrix可用于工作中场景
实际工作中遇到过这样的情况,我们系统中记录日志的方式是往队列发送数据,然后其他服务消费队列来记录到es中,某一天队列主机ip无法访问了,导致消息一直发不出去,虽然发送队列信息是用的线程,但请求api量太大导致了线程池发送队列失败并一直堆积,影响了整个系统,最终api接口不吐数据。
此刻如果用上hystrix话,即可避免api不吐数据问题,并且通过她的failcallback还能干点其他事情,并入发送邮件或是记录文本日志,防止日志丢失。
springcloud-hystrix运用
首先要明了hystrix一般作用于调用端,更容易理解的是倘若客户机和服务机网络问题造成无法联通,这个时候hystrix作用于客户机就可以暂停对服务机的访问,以此达到对客户端系统的稳定。
首先这里我有eureka注册中心和provider服务,然后创建了个consumer模块,并添加pom信息:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
然后在Application入口增加注解 @EnableCircuitBreaker 启动熔断,调用其他服务的地方如service层方法添加注解 @HystrixCommand 达到最小侵入式使用熔断:
@Override
@HystrixCommand(fallbackMethod = "fallbackMethod")
public List<MoUser> getList() {
//调用provider服务
return restTemplate.getForObject("http://PROVIDER/list", List.class);
}
注意 fallbackMethod 用来指定熔断后降级的方法名,降级方法需要和被注解方法返回值一样,保持数据格式一致嘛:
List<MoUser> fallbackMethod() {
return new ArrayList<MoUser>() {
{
add(new MoUser(, "服务挂了"));
}
};
}
最后需要在配置文件中增加开启熔断功能(默认是开启状态,所以可以不用配):
hystrix:
metrics:
enabled: true
此时当eureka,provider,consumer依次启动后,访问consumer接口能够正常返回数据,把provider服务停了,然后再访问consumer能够得到如下返回信息:
feign客户端使用hystrix
如果用了springcloud集成的注册中心(eureka,console等),通常就会用到feign客户端,因为springcloud是基于http的微服务,实际原理其实还是http去调用接口地址这有区别于rpc方式,feign中集成了hystrix,所以她很方便不用自己在写一套,先在consumer中加入feign依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-feign</artifactId>
<version>1.4..RELEASE</version>
</dependency>
Application入口加 @EnableFeignClients 注解,在consumer接口上增加FeignClient,如下:
@FeignClient(name = "PROVIDER",fallbackFactory = UserServiceFallback.class)
public interface IUserService {
@GetMapping("/list")
List<MoUser> getList();
}
下面简单接受feign构造函数的参数:
name:服务提供这application服务名
fallbackFactory:hystrix降级回调类
这里我们需要有一个自定义降级回调类,其实现 FallbackFactory 代码如下:
@Component
public class UserServiceFallback implements FallbackFactory<IUserService> { @Override
public IUserService create(Throwable throwable) {
return new IUserService() {
@Override
public List<MoUser> getList() {
return new ArrayList<MoUser>() {
{
add(new MoUser(, "神牛-fallback:" +
throwable.toString()));
}
};
}
};
}
}
要自定义降级返回接口的信息主要是里面实现了provider服务提供的IUserService接口里面的方法,增加降级返回的信息,这里可以接受 Throwable 导致降级的错误信息,最后需要我们配置启动feign的hystrix
feign:
hystrix:
enabled: true
有了上面的调整后,重启consumer并再次访问接口,能够得到如下想要的信息:
springcloud之hystrix熔断器-Finchley.SR2版的更多相关文章
- springcloud之服务注册与发现(zookeeper注册中心)-Finchley.SR2版
新年第一篇博文,接着和大家分享springcloud相关内容:本次主要内容是使用cloud结合zookeeper作为注册中心来搭建服务调用,前面几篇文章有涉及到另外的eureka作为注册中心,有兴趣的 ...
- springcloud之config配置中心-Finchley.SR2版
本篇和大家分享的是springcloud-config配置中心搭建,写到这里突然想起自己曾今开源过基于Redis发布订阅编写的一个配置中心,刚看了git星数有点少哈哈,这里顺势发个连接欢迎大侠们点赞: ...
- Spring-Cloud之Hystrix熔断器-5
一.在分布式系统中,服务与服务之间的依赖错综复杂,一种不可避免的情况就是某些服务会出现故障,导致依赖于它们的其他服务出现远程调度的线程阻塞 Hystrix是Netflix 公司开源的一个项目,它提供了 ...
- SpringCloud 之 Hystrix熔断器
Hystrix Hystrix请求熔断与服务降级 Hystrix线程隔离&请求缓存&请求合并
- springcloud(八)-Hystrix熔断器
雪崩效应 在微服务架构中通常会有多个服务层调用,基础服务的故障可能会导致级联故障,进而造成整个系统不可用的情况,这种现象被称为服务雪崩效应.服务雪崩效应是一种因“服务提供者”的不可用导致“服务消费者” ...
- Spring Cloud(四):服务容错保护 Hystrix【Finchley 版】
Spring Cloud(四):服务容错保护 Hystrix[Finchley 版] 发表于 2018-04-15 | 更新于 2018-05-07 | 分布式系统中经常会出现某个基础服务不可用 ...
- SpringCloud学习(6)——Hystrix熔断器
分布式系统面临的问题 复杂的分布式体系结构中的应用程序有数十个依赖关系, 每个依赖关系在某些时刻不可避免的失败. 服务雪崩效应 多个微服务调用的时候, 假设微服务A调用微服务B和微服务C, 微服务B和 ...
- 5.Spring Cloud初相识-------Hystrix熔断器
前言: 1.介绍Hystrix 在一个分布式系统里,许多依赖不可避免的会调用失败,比如超时.异常等,如何能够保证在一个依赖出问题的情况下,不会导致整体服务失败,这个就是Hystrix需要做的事情.Hy ...
- 高并发场景-请求合并(一)SpringCloud中Hystrix请求合并
背景 在互联网的高并发场景下,请求会非常多,但是数据库连接池比较少,或者说需要减少CPU压力,减少处理逻辑的,需要把单个查询,用某些手段,改为批量查询多个后返回. 如:支付宝中,查询"个人信 ...
随机推荐
- 在线OJ的小demo
牛课网OJ规则 用readLine()代替read_line() 用readLine()代替read_line() 用readLine()代替read_line() 用readLine()代替read ...
- Protostuff序列化分析
前言最近项目中需要将业务对象直接序列化,然后存数据库:考虑到序列化.反序列化的时间以及生产文件的大小觉得Protobuf是一个很好的选择,但是Protobuf有的问题就是需要有一个.proto的描述文 ...
- error.go源码笔记
] { case errorCodeConnFailed: return ErrConnectionFailed(err) case errorCodeHttpServ ...
- codeforces 671D
首先O(n2)dp很好想 f[i][j]表示i子树内的所有边都被覆盖且i~j的路径也都被覆盖的最小花费. 考虑去掉无用的状态,其实真正用到的就是每一条链. 去掉第二维,f[i]表示i子树内的边都被覆盖 ...
- openoffice excel word 转换pdf 支持本地调用和远程调用
OpenOffice.org 是一套跨平台的办公室软件套件,能在Windows.Linux.MacOS X (X11)和 Solaris 等操作系统上执行.它与各个主要的办公室软件套件兼容.OpenO ...
- 【SAP业务模式】之STO(一):业务背景和前台操作
所谓STO即两个关联公司之间的库存转储交易,一家公司发出采购订单向另一家公司做采购,然后在做发货.如此之后,两家公司有相应应收应付的票据,以及开票和发票校验等动作. STO分为一步法与两步法,因为一步 ...
- Python中collections模块
目录 Python中collections模块 Counter defaultdict OrderedDict namedtuple deque ChainMap Python中collections ...
- Docker 发布 Abp net core web 服务
Docker 发布 Abp net core web 服务 准备工作:Abp 项目,这个是模板下载地址 https://aspnetboilerplate.com/Templates (本例使用的是S ...
- 一文了解 Hadoop 运行机制
大数据技术栈在当下已经是比较成熟的了,Hadoop 作为大数据存储的基石,其重要程度不言而喻,作为一个想从 java 后端转向大数据开发的程序员来说,打好 Hadoop 基础,就相当于夯实建造房屋的地 ...
- Java-每日编程练习题①
1.输出打印一个九九乘法表 代码如下,很简单的一个for的嵌套循环即可实现 /** * 输出9*9口诀. * * @author ChenZX * */ public class Test01 { p ...