一、信号量隔离
创建项目
修改pom文件添加hystrix坐标
<dependency>
修改配置文件
spring.application.name=eureka-consumer-ribbon-semaphore
server.port=9010
eureka.client.serviceUrl.defaultZone=http://user:123456@eureka1:8761/eureka/,http://user:123456@eureka2:8761/eureka/
修改启动类
@EnableCircuitBreaker
修改ProductService
@Service
信号量隔离参数
二、线程池隔离和信号量隔离的区别
1.什么情况下,用线程池隔离?
请求并发量大,并且耗时长(请求耗时长一般是计算量大 ,或读数据库) : 采用线程隔离策略,这样的话,可以保证大量的容器(tomcat)线程可用,不会由于服务原因,- -直处于阻塞或等待状态,快速失败返回。
2.什么情况下,用信号量隔离?
请求并发量大,并且耗时短(请求耗时短可能是计算量小,或读缓存) : 采用信号量隔离策略,因为这类服务的返回通常会非常的快,不会占用容器线程太长时间,而且也减少了线程切换的一些开销,提高了缓存服务的效率。
三、Feign 的雪崩处理
1. Feign 的服务降级处理
创建项目
修改配置文件开启对 hystrix 的支持
spring.application.name=consumer-feign-fallback
server.port=9020
#设置服务注册中心地址,指向另一个注册中心
eureka.client.serviceUrl.defaultZone=http://user:123456@eureka1:8761/eureka/,http://user:123456@eureka2:8761/eureka/
#Feign 默认是不开启 Hystrix 的。默认为:false
feign.hystrix.enabled=true
修改 ProductConsumerService
@FeignClient
添加 ProductServiceFallback 类
@Component
修改 ProductController
/**
关闭provider,对服务进行降级返回fallback托底数据
2. 降级后的异常记录
创建项目
全局配置文件
spring.application.name=consumer-feign-fallbackfactory
server.port=9020
#设置服务注册中心地址,指向另一个注册中心
eureka.client.serviceUrl.defaultZone=http://user:123456@eureka1:8761/eureka/,http://user:123456@eureka2:8761/eureka/
#Feign 默认是不开启 Hystrix 的。默认为:false
feign.hystrix.enabled=true
添加 ProductServiceFallbackFactory 类
@Component
修改 ProductConsumerService
@FeignClient
四、可视化的数据监控 Hystrix-dashboard
1.可视化的数据监控 Hystrix-dashboard
Hystrix-dashboard 是一款针对 Hystrix 进行实时监控的工具,通过 Hystrix Dashboard 我们可以在直观地看到各 Hystrix Command 的请求响应时间, 请求成功率等数据。
创建项目
修改 pom 文件添加 Hystrix-dashboard 坐标
<?xml version="1.0" encoding="UTF-8"?>
修改启动类
@EnableCircuitBreaker
2.Hystrix-dashboard 监控中心
创建项目
修改 pom 文件添加 Hystrix-dashboard 坐标
<?xml version="1.0" encoding="UTF-8"?>
修改启动类
@EnableCircuitBreaker
修改配置文件
spring.application.name=eureka-consumer-hystrix-dashboard
server.port=1001
eureka.client.serviceUrl.defaultZone=http://user:123456@eureka1:8761/eureka/,http://user:123456@eureka2:8761/eureka/
启动顺序
先启动服务,再启动监控中心。
访问监控中心
首页介绍
监控中心图解
五、使用Turbine在多个服务与集群情况下收集数据监控
Turbine是聚合服务器发送事件流数据的-一个工具,hystrix 的监控中,只能监控单个节点,实际生产中都为集群,因此可以通过turbine来监控集群服务。
1.创建Turbine项目
修改 pom 文件添加 turbine 坐标
<?xml version="1.0" encoding="UTF-8"?>
修改配置文件
spring.application.name=eureka-consumer-hystrix-turbine
server.port=1002
eureka.client.serviceUrl.defaultZone=http://user:123456@eureka1:8761/eureka/,http://user:123456@eureka2:8761/eureka/
#---------------------------------------turbine--------------------------
#配置 Eureka 中的 serviceId 列表,表明监控哪些服务
turbine.appConfig=eureka-consumer-ribbon-threadpool,springcloud-eureka-consumer-feign-fallback
#指定聚合哪些集群,多个使用","分割,默认为 default。可使用http://.../turbine.stream?cluster={clusterConfig 之一}访问
turbine.aggregator.clusterConfig= default
# 1. clusterNameExpression 指定集群名称,默认表达式 appName;此时:turbine.aggregator.clusterConfig 需要配置想要监控的应用名称;
# 2. 当 clusterNameExpression: default 时,turbine.aggregator.clusterConfig 可以不写,因为默认就是 default;
# 3. 当 clusterNameExpression: metadata['cluster']时,假设想要监控的应用配置了 eureka.instance.metadata-map.cluster: ABC,
# 则需要配置,同时 turbine.aggregator.clusterConfig:ABC
turbine.clusterNameExpression="default"
修改启动类
@SpringBootApplication
2.使用 Turbine 聚合多个服务
修改被聚合的项目的 pom 文件添加 dashboard 坐标
<?xml version="1.0" encoding="UTF-8"?>
修改被监控的服务的启动类
@EnableFeignClients
查看 turbine 整合服务后的监控数据地址
http://localhost:1001/hystrix
测试turbine的整合
3.监控集群
六、采用 RabbitMQ,收集监控数据
1.创建 Consumer 服务
修改 Consumer 服务的 pom 文件
<?xml version="1.0" encoding="UTF-8"?>
修改 Consumer 的配置文件
spring.application.name=eureka-consumer-ribbon-dashboard
server.port=9010
eureka.client.serviceUrl.defaultZone=http://user:123456@eureka1:8761/eureka/,http://user:123456@eureka2:8761/eureka/
spring.rabbitmq.host=192.168.226.128
spring.rabbitmq.port=5672
spring.rabbitmq.username=user
spring.rabbitmq.password=123456
spring.rabbitmq.virtualHost=/
修改启动类
@EnableCircuitBreaker
2.创建Turbine项目
修改Turbine的pom文件
<?xml version="1.0" encoding="UTF-8"?>
修改Turbine的配置文件
spring.application.name=eureka-consumer-hystrix-turbine
server.port=1002
eureka.client.serviceUrl.defaultZone=http://user:123456@eureka1:8761/eureka/,http://user:123456@eureka2:8761/eureka/
spring.rabbitmq.host=192.168.226.128
spring.rabbitmq.port=5672
spring.rabbitmq.username=admin
spring.rabbitmq.password=1111
spring.rabbitmq.virtualHost=/
修改Turbine的启动类
@SpringBootApplication