博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
spring-cloud-starter-hystrix(断路器)服务不通或者调用失败后的错误处理和回调
阅读量:5039 次
发布时间:2019-06-12

本文共 2026 字,大约阅读时间需要 6 分钟。

雪崩效应

在微服务架构中通常会有多个服务层调用,大量的微服务通过网络进行通信,从而支撑起整个系统。各个微服务之间也难免存在大量的依赖关系。然而任何服务都不是100%可用的,网络往往也是脆弱的,所以难免有些请求会失败。基础服务的故障导致级联故障,进而造成了整个系统的不可用,这种现象被称为服务雪崩效应。服务雪崩效应描述的是一种因服务提供者的不可用导致服务消费者的不可用,并将不可用逐渐放大的过程。

Netflix Hystrix断路器

Netflix的Hystrix类库实现了断路器模式,在微服务架构中有多个层的服务调用。一个低水平的服务群中一个服务挂掉会给用户导致级联失效。调用一个特定的服务达到一定阈值(在Hystrix里默认是5秒内20个失败),断路由开启并且调用没有成功的。开发人员能够提供错误原因和开启一个断路由回调。

断路器简介

Netflix has created a library called Hystrix that implements the circuit breaker pattern. In a microservice architecture it is common to have multiple layers of service calls.

—-摘自官网

Netflix已经创建了一个名为Hystrix的库来实现断路器模式。 在微服务架构中,多层服务调用是非常常见的。

较底层的服务如果出现故障,会导致连锁故障。当对特定的服务的调用达到一个阀值(hystric 是5秒20次) 断路器将会被打开。

断路打开后,可用避免连锁故障,fallback方法可以直接返回一个固定值。

使用Hystrix

第一步:

POM添加依赖

org.springframework.cloud
spring-cloud-starter-hystrix

Application入口main方法上增加@EnableCircuitBreaker注解

第二步:

基于RestTemplate的调用方式集成:

在方法上加上@HystrixCommand,并指定fallbackMethod方法。

@Servicepublic class HelloService {    @Autowired    RestTemplate restTemplate;    @HystrixCommand(fallbackMethod = "hiError")    public String hiService(String name) {        return restTemplate.getForObject("http://SERVICE-HI/hi?name="+name,String.class);    }    public String hiError(String name) {        return "hi,"+name+",sorry,error!";    }}

基于Feign的方式:

在SchedualServiceHi接口的注解中加上fallback的指定类就行了:

@FeignClient(value = "service-hi",fallback = SchedualServiceHiHystric.class)public interface SchedualServiceHi {    @RequestMapping(value = "/hi",method = RequestMethod.GET)    String sayHiFromClientOne(@RequestParam(value = "name") String name);}

SchedualServiceHiHystric类:

@Componentpublic class SchedualServiceHiHystric implements SchedualServiceHi {    @Override    public String sayHiFromClientOne(String name) {        return "sorry "+name;    }}

果使用feign不想用断路器的话,可以在配置文件中关闭它,配置如下:

feign.hystrix.enabled=false

第三步:

一些通用配置:

参考官网:

 

Maven示例:

 

参考:

(以上内容部分内容转自此篇文章)

(以上内容部分内容转自此篇文章)

转载于:https://www.cnblogs.com/EasonJim/p/7613595.html

你可能感兴趣的文章
JDK、JRE、JVM三者间的联系与区别
查看>>
ssm中实现excle导入导出
查看>>
2011-07-06 11:19 Hibernate提供了3种检索策略
查看>>
CSS Hacker
查看>>
有关Botton的用法(一)
查看>>
前端jquery一些基本语法
查看>>
单表入库最快的方法
查看>>
线性的数据结构
查看>>
使用MQ消息队列的优缺点
查看>>
SQL Server 表的管理_关于数据增删查改的操作的详解(案例代码)
查看>>
Win8Metro(C#)数字图像处理--2.5图像亮度调整
查看>>
SQLServer2005数据库快照的简单使用
查看>>
ASP.NET MVC 5 入门教程 (4) View和ViewBag
查看>>
T-SQL性能调整——信息收集
查看>>
Powerdesigner 16.5 从SQL Server 2012做逆向工程时提示:Unable to list tables问题
查看>>
NSIS:卸载时选择组件
查看>>
程序员最新笑话集锦
查看>>
10.29
查看>>
Linux(CentOS)下安装Zend Framework
查看>>
ArcEngine 数据导入经验(一)
查看>>