- 测试:(服务端,客户端feign,注册中心)
这里我们可能会出现一直访问服务降级的操作,并无大碍。可以通过测试all和get
开启服务端
关闭提供者(服务端)
访问/dept/get/?总结:
6. 服务熔断和降级的区别
- 服务熔断—>服务端:某个服务超时或异常,引起熔断~,类似于保险丝(自我熔断)
- 服务降级—>客户端:从整体网站请求负载考虑,当某个服务熔断或者关闭之后,服务将不再被调用,此时在客户端,我们可以准备一个 FallBackFactory ,返回一个默认的值(缺省值)。会导致整体的服务下降,但是好歹能用,比直接挂掉强。
- 触发原因不太一样,服务熔断一般是某个服务(下游服务)故障引起,而服务降级一般是整体负荷考虑;管理目标的层次不太一样,熔断其实是一个框架级的处理,每个微服务都需要(无层级之分),而降级一般需要对业务有层级之分(比如降级一般是从最外围服务开始)
- 实现方式不太一样,服务降级具有代码侵入性(由控制器完成/或自动降级),熔断一般称为自我熔断。
熔断,降级,限流:
限流:限制并发的请求访问量,超过阈值则拒绝;
降级:服务分优先级,牺牲非核心服务(不可用),保证核心服务稳定;从整体负荷考虑;
熔断:依赖的下游服务故障触发熔断,避免引发本系统崩溃;系统自动执行和恢复
7.Dashboard 流监控
(1).详细步骤
1.新建springcloud-consumer-hystrix-dashboard-9001模块
2.添加依赖
<dependencies> <dependency> <groupId>com.jsxs</groupId> <artifactId>SpringCloud-api</artifactId> <version>1.0-SNAPSHOT</version> </dependency> <!-- hystrix-dashboard --> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-netflix-hystrix-dashboard --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> <version>2.2.5.RELEASE</version> </dependency> <!-- hystrix 依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> <version>2.2.5.RELEASE</version> </dependency> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-ribbon --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-ribbon</artifactId> <version>1.4.6.RELEASE</version> </dependency> <!-- Eureka --> <!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-eureka --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> <version>1.4.6.RELEASE</version> </dependency> <!-- 热部署工具--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
3.配置文件
server: port: 9001
4.服务端(提供者必须要有这个依赖)-hystrix-8001这个模块
<!-- 监控信息--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- hystrix 依赖--> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> <version>2.2.5.RELEASE</version> </dependency>
5.访问:http://localhost:9001/hystrix
启动 7001 hystrix-8001 9001
http://localhost:8081/dept/queryById/1 -》先get
http://localhost:8081/actuator/hystrix.stream -》查看ping
进入监控页面:
监控它 http://localhost:8081/actuator/hystrix.stream
如果出现上面的情况,我们需要在9001配置这样的
hystrix: dashboard: proxy-stream-allow-list: "*"
然后再次重新启动发现,如果我们不刷新那么他就会慢慢变小
(2).介绍
一圈
- 实心圆: 公有两种含义,他通过颜色的变化代表了实例的健康程度
- 它的健康程度从绿色<黄色<橙色<红色递减
- 该实心圆除了颜色的变化之外,它的大小也会根据实例的请求流量发生变化,流量越大,该实心圆就越大,所以通过该实心圆的展示,就可以在大量的实例中快速发现故障实例和高压力实例。
一线
- 曲线:用来记录2分钟内流量的相对变化,可以通过它来观察到流量的上升和下降趋势!
(九)、 Zull路由网关
1.概述
什么是zuul?
Zull包含了对请求的路由(用来跳转的)和过滤两个最主要功能:
其中路由功能负责将外部请求转发到具体的微服务实例上,是实现外部访问统一入口的基础,(之前我们在测试过程中,地址都是http://localhost:8001/dept/get/1 ,当然端口号还有8002、8003,但是实际我们应该把localhost:8001 这一部分隐藏起来,真实服务的地址不应该暴露出去,例如我们可以设置为:http://www.jsxs.com/dept/get/1,做一个统一的访问地址。)
而过滤器功能则负责对请求的处理过程进行干预,是实现请求校验,服务聚合等功能的基础。
Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他服务的消息,也即以后的访问微服务都是通过Zuul跳转后获得。(zull管理这些服务,然后zull注册到Eureka中)
注意:Zuul 服务最终还是会注册进 Eureka
提供:代理 + 路由 + 过滤 三大功能!
Zuul 能干嘛?
- 路由
- 过滤
- 官方文档:https://github.com/Netflix/zuul/