(四)Hystrix容错保护
Feign默认是整合了Ribbon和Hystrix这两个框架,所以代码我们在上一篇的基础上进行修改,启动Eureka,service-hello,Feign
所谓的熔断机制和日常生活中见到电路保险丝是非常相似的,当出现了问题之后,保险丝会自动烧断,以保护我们的电器, 那么如果换到了程序之中呢?
当现在服务的提供方出现了问题之后整个的程序将出现错误的信息显示,而这个时候如果不想出现这样的错误信息,而希望替换为一个错误时的内容。
一个服务挂了后续的服务跟着不能用了,这就是雪崩效应
对于熔断技术的实现需要考虑以下几种情况:
· 出现错误之后可以 fallback 错误的处理信息;
· 如果要结合 Feign 一起使用的时候还需要在 Feign(客户端)进行熔断的配置。
在上文的feign项目中,修改启动类
@EnableCircuitBreaker // 开启Hystrix容错
@EnableDiscoveryClient
@EnableFeignClients //开启Feign的功能:
@SpringBootApplication
public class SpringCloundEurekaFeginExampleApplication { public static void main(String[] args) {
SpringApplication.run(SpringCloundEurekaFeginExampleApplication.class, args);
}
}
properties文件添加配置,打开hystrix
feign.hystrix.enabled=true
实现IFeignService的FallBack
添加FeignServiceFallback
@Component
public class FeignServiceFallback implements IFeginService {
@Override
public String index() {
return "错误了是吗???";
}
}
修改IFeignService
//代表改接口用费"service-hello"的服务 提供
@FeignClient(value = "service-hello", fallback = FeignServiceFallback.class)
public interface IFeginService { @RequestMapping(value = "/index")
public String index();
}
这个仅仅是在@FeignClient
注解中增加了fallback
的配置,并设置其值为我们刚刚新建的类:FeignServiceFallback。
接下来停掉SERVICE-HELLO或者在服务方法直接抛错
可以看到FallBack已经启作用,当全部SERVICE-HELLO不起作用时,SERVICE-FEIGN中的FeignServiceFallback进入了回退处理。
在不使用Feign时如何使用Hystrix
其实Hystrix提供了两个对象来支持回退处理:HystrixCommand
和HystrixObservableCommand
,其中后者是用在依赖的服务返回多个操作结果的时候,这里我们只演示一下HystrixCommand
的使用,对于后者可自行尝试,或者查看官方文档
添加pom:spring-cloud-starter-netflix-hystrix
启动类开启:@EnableCircuitBreaker
@Service
public class HelloServiceImpl implements IHelloService { @Autowired
RestTemplate restTemplate; @HystrixCommand(fallbackMethod = "serviceFallback")
@Override
public String index() {
return restTemplate.getForObject("http://SERVICE-HELLO-2/index", String.class);
} public String serviceFallback() {
return "错误了吗?";
}
}
Hystrix监控
spring-cloud-starter-hystrix(spring-cloud-starter-netflix-hystrix
)
spring-boot-starter-actuator
,能够让/hystrix-stream
端点可以获取到Hystrix的监控数据。<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
springboot2的查看/actuator 是没办法查看所有监控接口的,需要在application.properties添加
management.endpoints.web.exposure.include=*
可以看到页面会重复输出一些统计数据(注: 你要先尝试访问一下所提供的服务才会有这些数据输出)。至于这些数据到底是什么我在这里就不一一解析了,幸好Hystrix还为我们提供了一个可视化界面来查看这些数据。
Hystrix Dashboard
添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
</dependency>
入口文件添加 @EnableHystrixDashboard 注解
打开http://localhost:8886/hystrix,可以看到如下界面:
说明Dashboard已经启动成功。然后在界面中输入之前的地址: http://localhost:8886/actuator/hystrix.stream,然后点击[Monitor Stream]就可以看到统计报表页面:
(四)Hystrix容错保护的更多相关文章
- SpringCloud之Hystrix容错保护原理及配置
1 什么是灾难性雪崩效应? 如下图的过程所示,灾难性雪崩形成原因就大致如此: 造成灾难性雪崩效应的原因,可以简单归结为下述三种: 服务提供者不可用.如:硬件故障.程序BUG.缓存击穿.并发请求量过大等 ...
- SpringCloud Alibaba实战(9:Hystrix容错保护)
源码地址:https://gitee.com/fighter3/eshop-project.git 持续更新中-- 在上一节我们已经使用OpenFeign完成了服务间的调用.想一下,假如我们一个服务链 ...
- Spring Cloud(四):服务容错保护 Hystrix【Finchley 版】
Spring Cloud(四):服务容错保护 Hystrix[Finchley 版] 发表于 2018-04-15 | 更新于 2018-05-07 | 分布式系统中经常会出现某个基础服务不可用 ...
- spring cloud 入门系列四:使用Hystrix 实现断路器进行服务容错保护
在微服务中,我们将系统拆分为很多个服务单元,各单元之间通过服务注册和订阅消费的方式进行相互依赖.但是如果有一些服务出现问题了会怎么样? 比如说有三个服务(ABC),A调用B,B调用C.由于网络延迟或C ...
- 【Dalston】【第四章】容错保护(Hystrix)
我们在实践微服务架构时,通常会将业务拆分成一个个微服务,微服务之间通过网络进行通信,进行互相调用,造成了微服务之间存在依赖关系.我们知道由于网络原因或者自身的原因,服务并不能保证服务的100%可用,如 ...
- 白话SpringCloud | 第五章:服务容错保护(Hystrix)
前言 前一章节,我们知道了如何利用RestTemplate+Ribbon和Feign的方式进行服务的调用.在微服务架构中,一个服务可能会调用很多的其他微服务应用,虽然做了多集群部署,但可能还会存在诸如 ...
- Spring Cloud 2-Hystrix 断路容错保护(四)
Spring Cloud Hystrix 1.RestTemplate 容错 pom.xml application.yml application.java HelloService.java ...
- Spring Cloud (8) 服务容错保护-Hystrix依赖隔离
依赖隔离 docker使用舱壁模式来实现进程的隔离,使容器与容器之间不会互相影响.而Hystrix则使用该模式实现线程池的隔离,它会为每一个Hystrix命令创建一个独立的线程池,这样就算在某个Hys ...
- SpringCould-------使用Hystrix 实现断路器进行服务容错保护
消费: <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.or ...
随机推荐
- php开启CURL支持
window下安装php_curl支持 1. 找到php.ini 修改extension=php_curl.dll 把前面的分号去掉2. 把 php_curl.dll libeay32.dll ssl ...
- [转]SQL Server 批量完整备份
最近我们的服务器需要迁移,服务器上有很多数据库,有很多都不知道干什么的了,但是为了保险起见,我决定都备份下,起初我是右键一个一个备份的,备份三四个还好,可是数据库太多了,而且手动一步一步操作,还得修改 ...
- CSDN日报20170527 ——《人机大战,历史的见证》
在网络层,互联网提供所有应用程序都要使用的两种类型的服务,尽管目前理解这些服务的细节并不重要,但在所有TCP/IP概述中,都不能忽略他们: 无连接分组交付服务(Connectionless Packe ...
- 弹出ifame页面(jquery.reveal.js)
<body> <a data-reveal-id="myModalDailyModify" data-animation="fade" tit ...
- git提交不用每次都输入用户名密码
克隆项目二种方式: 1. 使用https url克隆, 复制https url 然后到 git clone https-url 2.使用 SSH url 克隆却需要在克隆之前先配置和添加好 SSH ...
- Java之NoSuchMethodError
Java之NoSuchMethodError 最近生产环境出现的一个问题,NoSuchMethodError,之前遇到过,大概明白就是方法冲突.这里总结一下,以备学习之用. 错误代码如下: 2018- ...
- Android studio关于点击事件后的页面跳转,选择完成后返回(onActivityResult)
我这个人喜欢直接上代码,在代码中说明更方便,更直接. 首先在.xml中设置一个button按钮,和一个EditText框,并分别做好id号. 这里我以籍贯测试对象. <LinearLayout ...
- Oracle [sys_connect_by_path] 函数
create table test ( NO NUMBER, VALUE VARCHAR2(100), NAME VARCHAR2(100) ); -------------------------- ...
- CorelDRAW设计制作超漂亮的3D立体字效果实例教程
第一.打上招聘两个字,选择一个喜欢的字体,如下. 第二.把字体转曲,等待下一步编辑曲线做好准备,如下. 第三.选择形状工具,编辑字体形状,根据自己需要可任意编辑,如下. 第四.适当画一些装饰素材,比如 ...
- 开源Android容器化框架Atlas开发者指南
Atlas是古希腊神话中的天神,是波士顿动力公司的机器人,借助搜索引擎,得以发现这个名词背后许许多多的含义.在手机淘宝,Atlas是一个扎根于Android客户端的一个组件化容器框架,相比神话中用手和 ...