学习主题:Hystrix
- 解决灾难性雪崩效应-服务熔断-服务熔断处理
- 熔断参数circuitBreaker.enabled的作用是什么?
- 熔断参数circuitBreaker.requestVolumeThreshold的作用是什么?
- 熔断参数circuitBreaker.sleepWindowInMiliseconds的作用是什么?
- 熔断参数circuitBreaker.errorThresholdPercentage的作用是什么?
- 熔断参数circuitBreaker.forceOpen的作用是什么?
- 熔断参数circuitBreaker.forceClosed的作用是什么?
![f085c521e26261235acac95a295c2dcd.png](https://i-blog.csdnimg.cn/blog_migrate/990bf4d1834384cf75d3f37a8f444f72.jpeg)
- 解决灾难性雪崩效应-隔离机制-线程池隔离-创建项目
- 什么是线程池隔离?
- 线程池隔离的优点是什么?
- 线程池隔离的缺点是什么?
将多个服务接口同时放到一个线程池中 ,当一个服务并发量急剧增加时 ,线程池会瘫痪,另一个线程也会完蛋
预测哪个服务接口线程并发量大 ,将并发量大的服务接口线程单独拉出来放到另一个线程池中 , 减少服务器的压力,同时这个服务出错时也不会影响其他服务
![d1f63f8980a7197d096f7f83c5cdc671.png](https://i-blog.csdnimg.cn/blog_migrate/0372c8895166d06f7091f2690a285fb4.jpeg)
解决灾难性雪崩效应-隔离机制-线程池隔离-线程池隔离处理
-
- @HystrixCommand注解中的threadPoolProperties属性的作用是什么?
- @HystrixProperty注解的作用是什么?
- 线程池隔离参数groupKey的作用是什么?
- 线程池隔离参数commandKey的作用是什么?
- 线程池隔离参数threadPoolkey的作用是什么?
- 线程池隔离参数coreSize的作用是什么?
- 线程池隔离参数maxQueueSize的作用是什么?
- 线程池隔离参数queueSizeRejectionThreshold的作用是什么?
- 线程池隔离参数keepAliveTimeMinutes的作用是什么?
![a95a057406800969b1944201a4b8d70c.png](https://i-blog.csdnimg.cn/blog_migrate/cebc9cedf6c7dc437b7ca76a95055d00.jpeg)
- 解决灾难性雪崩效应-隔离机制-信号量隔离-创建项目
- 什么是信号量隔离?
当Consumer发送大量请求到provider时 ,会访问信号量池
- 解决灾难性雪崩效应-隔离机制-信号量隔离-信号量隔离处理
- 信号量隔离参数execution.isolation.strategy的作用是什么?
- 信号量隔离参数execution.isolation.thread.timeoutInMiliseconds的作用是什么?
- 信号量隔离参数execution.isolation.thread.interruptOnTimeout的作用是什么?
- 信号量隔离参数execution.isolation.semaphore.maxConcurrentRequests的作用是什么?
- 信号量隔离参数fallback.isolation.semaphore.maxConcurrentRequests的作用是什么?
![9fbc5b496dd889f21424602f72e33399.png](https://i-blog.csdnimg.cn/blog_migrate/1f0c8bdd43c18032c705071c682b3cc6.jpeg)
- 线程池隔离和信号量隔离的区别
- 线程池隔离与信号量隔离有什么区别?
- 什么情况下使用线程池隔离?
- 什么情况下使用信号量隔离?
![fa8762dca6f946dc342b0d27559e6beb.png](https://i-blog.csdnimg.cn/blog_migrate/8381159f3154e00e0daa2538008a75db.jpeg)
![3604ea277a987f523bf55b4c35995f44.png](https://i-blog.csdnimg.cn/blog_migrate/1a08767a7568ddc70c65610aaf0e2f65.jpeg)
![93bc98ab53fce5c611d970b8c678a2f2.png](https://i-blog.csdnimg.cn/blog_migrate/2d79d723528061ac1167b64f41a6a087.jpeg)
- Feign的服务降级处理-创建项目
- Feign的服务降级处理-服务降级处理
- 修改业务层代码,在Feign中配置服务降级。
修改全局配置文件
#Feign默认不开启Hystrix,为false
feign:
hystrix:
enabled: true
接口中指定服务项目名,托底数据类
@FeignClient(name="Ego-Provider-Provider",fallback=ConsumerServiceImplRallback.class)//使用@FeignClient注解 name属性指定服务提供者的应用名
- 启动服务测试效果。
![aeeaff38129c5ecf9efe2f9104c74843.png](https://i-blog.csdnimg.cn/blog_migrate/09ed8c203b78281715b6119fd8568a85.png)
- 服务降级后的异常记录
- 为什么要记录降级后的异常信息。
在使用Feign的开发过程中 ,出现了托底数据 ,
可以通过这种方式获取异常的相关信息 ,帮助我们解决异常
- 在项目中开启可视化的数据监控Hystrix-dashboard
- 什么是Hystrix-dashboard?
- @EnableHystrix注解的作用是什么?
- @EnableHystrixDashboard注解的作用是什么?
Hystrix-dashboard 是一款针对 Hystrix 进行实时监控的工具,通过 Hystrix Dashboard 我们可以在直观地看到各 Hystrix Command 的请求响应时间, 请求成功率等数据。
@EnableHystrix 开启数据监控
@EnableHystrixDashboard 开启图形化界面
- 搭建Hystrix-dashboard数据监控中心
- 创建数据监控中心服务。
- 修改POM文件,添加actuator启动器,添加hystrix启动器、hystrix-dashboard启动器。
- 需改启动类添加开启Hystrix与HystrixDashboard。
- 按照启动顺序启动服务。
- 访问HystrixDashboard服务,查看数据。
server:
port: 9999
spring:
application:
name: Eureka-Consumer-Ribbon-DashBoard-view
#可有可无,添加Eureka的目的是方便管理服务
eureka:
client:
serviceUrl:
defaultZone: http://admin:admin@eureka1:8761/eureka/,http://admin:admin@eureka2:8761/eureka/
![b4b761aef8004ad462837233b562ae29.png](https://i-blog.csdnimg.cn/blog_migrate/00308c4caa27061478b60044b4956825.jpeg)
- 创建Turbine聚合服务器
- Turbine的作用是什么?
- @EnableTurbine注解的作用是什么?
Turbine对监控服务做了聚合 ,但是仍需要依赖Dashboard
@EnableTurbine:开启聚合服务
- 使用Turbine对多个服务进行监控
- Turbine默认监听端口是多少?
- @EnableHystrixDashboard注解的作用是什么?
8080
@EnableHystrixDashboard:开启数据监控的图形化界面
- 使用Turbine监控集群
- 通过Turbine查看集群监
![ea2ddc58781299dc66bd15485f3bc14b.png](https://i-blog.csdnimg.cn/blog_migrate/9ed3d4f9cfefba10d35ef40c7528db69.jpeg)