Spring Cloud 学习 (四) Hystrix & Hystrix Dashboard & Turbine
在复杂的分布式系统中,可能有几十个服务相互依赖,这些服务由于某些原因,例如机房的不可靠性、网络服务商的不可靠性等,导致某个服务不可用 。 如果系统不隔离该不可用的服务,可能会导致整个系统不可用。Hystrix 提供了熔断器功能,能够阻止分布式系统中出现联动故障。Hystrix 是通过隔离服务的访问点阻止联动故障的,并提供了故障的解决方案,从而提高了整个分布式系统的弹性。
使用 Hystrix
在 Ribbon 使用 Hystrix
添加依赖包
<dependency>
<groupId>com.netflix.hystrix</groupId>
<artifactId>hystrix-javanica</artifactId>
</dependency>
修改启动类
@EnableHystrix // 启用 Hystrix 熔断器
@EnableEurekaClient
@SpringBootApplication
public class EurekaRibbonClientApp {
public static void main(String[] args){
SpringApplication.run(EurekaRibbonClientApp.class, args);
}
}
修改 Service
@Service
public class RibbonService {
@Autowired
RestTemplate restTemplate;
@HystrixCommand(fallbackMethod = "hiError") // 启用 Hystrix 熔断器
public String hi(String name){
return restTemplate.getForObject("http://eureka-client/hi?name=" + name, String.class);
}
public String hiError(String name){
return "error! sorry, " + name;
}
}
测试
- 启动 eureka-server
- 启动 eureka-ribbon-client
访问 http://localhost:8021/hi?name=victor 可以看到返回的是 hiError 方法执行的结果
在 Feign 使用 Hystrix
application.yml 添加
feign:
hystrix:
enabled: true
添加熔断处理类
@Component
public class HiHystrix implements EurekaClientFeign {
@Override
public String sayHi(String name) {
return "error! sorry, " + name;
}
}
修改 FeignClient
@FeignClient(value = "eureka-client", configuration = FeignConfig.class
, fallback = HiHystrix.class)
public interface EurekaClientFeign {
@GetMapping("/hi")
String sayHi(@RequestParam(value = "name") String name);
}
测试
- 启动 eureka-server
- 启动 eureka-feign-client
访问 http://localhost:8031/hi?name=victor 可以看到返回的是 hiError 方法执行的结果
使用 Hystrix Dashboard 监控熔断器状态
在 Ribbon 使用 Hystrix Dashboard
添加依赖包
<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-dashboard</artifactId>
</dependency>
修改启动类
@EnableHystrix // 启用 Hystrix 熔断器
@EnableHystrixDashboard // 启用 Hystrix Dashboard
@EnableEurekaClient
@SpringBootApplication
public class EurekaRibbonClientApp {
public static void main(String[] args){
SpringApplication.run(EurekaRibbonClientApp.class, args);
}
}
application.yml 添加
management:
endpoints:
web:
exposure:
include: "*"
测试
- 启动 eureka-server
- 启动 eureka-ribbon-client
先访问 http://localhost:8021/hi?name=victor,然后访问 http://localhost:8021/actuator/hystrix.stream 浏览器上会显示熔断器的数据指标
访问 http://localhost:8021/hystrix,然后在界面输入 http://localhost:8021/actuator/hystrix.stream 点击 [Monitor Stream] 按钮可以看到熔断器的各种数据指标
在 Feign 使用 Hystrix Dashboard
添加依赖包
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
<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-dashboard</artifactId>
</dependency>
与 Ribbon 相比需要添加 spring-cloud-starter-netflix-hystrix 依赖
修改启动类
@EnableFeignClients // 开启 Feign Client
@EnableHystrixDashboard // 启用 Hystrix Dashboard
@EnableCircuitBreaker // 启用 Hystrix 熔断器
@EnableEurekaClient
@SpringBootApplication
public class EurekaFeignClientApp {
public static void main(String[] args){
SpringApplication.run(EurekaFeignClientApp.class, args);
}
}
与 Ribbon 相比需要添加 @EnableCircuitBreaker 注解
application.yml 添加
management:
endpoints:
web:
exposure:
include: "*"
测试
- 启动 eureka-server
- 启动 eureka-feign-client
先访问 http://localhost:8031/hi?name=victor,然后访问 http://localhost:8031/actuator/hystrix.stream 浏览器上会显示熔断器的数据指标
访问 http://localhost:8031/hystrix,然后在界面输入 http://localhost:8031/actuator/hystrix.stream 点击 [Monitor Stream] 按钮可以看到熔断器的各种数据指标
使用 Turbine 聚合监控
新建 spring-cloud-eureka-turbine-client Module
pom
<parent>
<artifactId>spring-cloud-parent</artifactId>
<groupId>com.karonda</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>spring-cloud-eureka-turbine-client</artifactId>
<dependencies>
<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-dashboard</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-turbine</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
application.yml
server:
port: 8041
eureka:
client:
service-url:
defaultZone: http://localhost:8001/eureka/
spring:
application:
name: turbine-client
turbine:
aggregator:
cluster-config: default
app-config: ribbon-client, feign-client
cluster-name-expression: new String("default")
启动类
@SpringBootApplication
@EnableHystrixDashboard // 启用 Hystrix Dashboard
@EnableTurbine // 启用 Hystrix Turbine
public class EurekaTurbineClientApp {
public static void main(String[] args){
SpringApplication.run(EurekaTurbineClientApp.class, args);
}
}
测试
- 启动 eureka-server
- 启动 eureka-ribbon-client
- 启动 eureka-feign-client
- 启动 eureka-turbine-client
- 访问 http://localhost:8021/hi?name=victor
- 访问 http://localhost:8031/hi?name=victor
访问 http://localhost:8021/hystrix 或 http://localhost:8031/hystrix 然后在界面输入 http://localhost:8041/turbine.stream 点击 [Monitor Stream] 按钮可以看到 eureka-ribbon-client 和 eureka-feign-client 熔断器的各种数据指标
完整代码:GitHub
本人 C# 转 Java 的 newbie, 如有错误或不足欢迎指正,谢谢
Spring Cloud 学习 (四) Hystrix & Hystrix Dashboard & Turbine的更多相关文章
- spring cloud学习(五)断路器 Hystrix
断路器 Hystrix 断路器模式 (云计算设计模式) 断路器模式源于Martin Fowler的Circuit Breaker一文. 在分布式环境中,其中的应用程序执行访问远程资源和服务的操作,有可 ...
- spring cloud学习(四) Fegin 的使用
Feign 的使用 什么是Feign? Feign : Declarative REST clients. Feign 是一个声明web服务客户端,这便得编写web服务客户端更容易,使用Feign 创 ...
- spring cloud学习(四) 动态路由
Zuul的主要功能是路由和过滤器.路由功能是微服务的一部分,zuul实现了负载均衡. 1.1 新建模块zuul pom.xml <?xml version="1.0" enc ...
- Spring Cloud(四):服务容错保护 Hystrix【Finchley 版】
Spring Cloud(四):服务容错保护 Hystrix[Finchley 版] 发表于 2018-04-15 | 更新于 2018-05-07 | 分布式系统中经常会出现某个基础服务不可用 ...
- Spring Cloud第八篇 | Hystrix集群监控Turbine
本文是Spring Cloud专栏的第八篇文章,了解前七篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Clo ...
- Spring Cloud第六篇 | Hystrix仪表盘监控Hystrix Dashboard
本文是Spring Cloud专栏的第六篇文章,了解前五篇文章内容有助于更好的理解本文: Spring Cloud第一篇 | Spring Cloud前言及其常用组件介绍概览 Spring Cloud ...
- spring cloud 2.x版本 Hystrix Dashboard断路器教程
前言 本文采用Spring cloud本文为2.1.8RELEASE,version=Greenwich.SR3 本文基于前两篇文章eureka-server.eureka-client.eureka ...
- spring cloud 学习(9) - turbine stream无法在eureka注册的解决办法
turbine是啥就不多解释了,初次接触的可以移步spring cloud 学习(4) - hystrix 服务熔断处理 拉到最后看一下,turbine stream默认情况下启动成功后,eureka ...
- 【Spring Cloud笔记】 断路器-hystrix
在微服务架构中,一个微服务的超时失败可能导致瀑布式连锁反映,Spring Cloud Netflix 的断路器Hystrix通过自主反馈,防止了这种情况发生.下面介绍简单的断路器使用方法. [step ...
随机推荐
- python开发基础(二)运算符以及数据类型之dict(字典)
# encoding: utf-8 # module builtins # from (built-in) # by generator 1.147 """ Built- ...
- mongoDB之C#and.net Driver
之前一直都是用NodeJS来连接操作mongoDB的,但是最近需要用C#操作mongoDB的需要,所以研究了下C#驱动.mongoDB官方在GitHub上提供了C#驱动源码https://github ...
- C++变量的存储类型
C++变量和函数包括两个属性:数据类型和数据的存储类型.存储类型是指数据在内存中存储的方式.变量的存储类型分为四种:自动类型(auto),寄存器类型(register).静态类型(static)外部类 ...
- 【笔记】拉勾Java工程师高薪训练营-第一阶段 开源框架源码解析-模块一 持久层框架涉及实现及MyBatis源码分析-任务一:自定义持久层框架
以下笔记是我看完视频之后总结整理的,部分较为基础的知识点也做了补充,如有问题欢迎沟通. 目录 任务一:自定义持久层框架 1.1 JDBC回顾及问题分析 1.2 自定义持久层框架思路分析 1.3 IPe ...
- centos7安装数据库 (系统包含预装环境mariadb)
查看系统是否安装了MySQL,有些没安装但是有路径,那是因为系统安装了mariadb-libs,对应的配置文件目录:/etc/my.cnf(下面就根据mariadb来安装mysql) 查看系统预装ma ...
- Win7 安装 Docker 踩的那些坑
公司电脑是 WIN7 x64 旗舰版 SP1,安装 Docker 时踩了好多雷,分享出来给大家排排雷. 首先,Docker Desktop Installer 的 Windows 版只支持 Win10 ...
- 最多约数问题(Java)
Description 正整数x 的约数是能整除x 的正整数.正整数x的约数个数记为div(x).例如,1,2,5,10 都是正整数10的约数,且div(10)=4.设a 和b是2 个正整数,a≤b, ...
- PicGo+jsDelivr+GitHub搭建免费图床,Typora使用图床
Github配置 首先,创建一个GitHub账号 然后添加一个仓库 创建完后点头像,Setting 然后点击Developer settings 然后点击Personal access tokens ...
- MediaCodec编码OpenGL速度和清晰度均衡
## 概述 在安卓平台为了实现h264视频编码,我们通常可以使用libx264, ffmpeg等第三方视频编码库,但是如果对编码的速度有一定的要求,要实现实时甚至超实时的高速视频编码,我们并没有太 ...
- 重闯Sqli-labs关卡第一天(1-4关)
前言 之前暑假闯了很多关但是最近刷BUGku的题 遇到SQL注入题就凉... 垃圾的我只能继续硬着头皮重新再来学习,再来闯. 第一关:字符型注入 字符型注入就是注入点的数据类型是字符型.字符型注入与数 ...