Spring Cloud网关+过滤器+控制过滤器的执行
| 课程回顾
1、为什么需要熔断器?
在分布式中,我们会根据业务或功能将项目拆分为多个服务单元,各个服务单元之间通过服务注册和订阅的方式相互依赖和调用功能,随着项目和业务的不断拓展,服务单元数量也逐渐增多,相互之间的依赖关系也越来越复杂,这时候,可能会有某个服务单元出现问题或网络原因依赖调用出错或延迟,此时如果调用该依赖的请求不断增加,那么要调用该服务的服务将都会等待或者出现故障,如果后续连锁反应越来越多,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。服务与服务的依赖会导致服务之间的故障传播,从而迎来"雪崩效应"。为了解决这种每个点或多个点的故障,就有了熔断器的出现。
2、负载均衡有哪些?
DNS域名解析负载均衡、IP负载均衡、HTTP重定向负载均衡、反向代理负载均衡等
| 预习检查
1、Zuul网关的作用?
1)是类似于Nginx的网址重定向,但zuul的重定向的一般是整个spring cloud里在Eureka注册中心的模块
2)zuul更重要的功能为过滤请求
2、启动网关的注解是?
@EnableZuulProxy
| 章节目标
- 网关地址重定向。
- 网关过滤器。
- 多个过滤器控制执行。
| 章节重点、难点
1)、重点
多个过滤器控制执行。
2)、难点
网关工程加过滤器、多个过滤器控制执行。
| 知识点讲解
网关地址重定向
1、微服务调用常见问题
常见的现象
-
客户端会多次请求不同的微服务,增加了客户端的复杂性。
-
存在跨域请求,在一定场景下处理相对复杂。
-
认证复杂,每个服务都需要独立认证。
-
难以重构,随着项目的迭代,可能需要重新划分微服务。例如,可能将多个服务合并成一个或者将一个服务拆分成多个。如果客户端直接与微服务通讯,那么重构将会很难实施。
-
某些微服务可能使用了防火墙/浏览器不友好的协议,直接访问会有一定困难。
使用网关优点:
- 易于监控。可在微服务网关收集监控数据并将其推送到外部系统进行分析。
- 易于认证。可在微服务网关上进行认证。然后再将请求转发到后端的微服务,而无须在每个微服务中进行认证。
- 减少了客户端与各个微服务之间的交互次数。
2、Zuul网关的主要作用
1)是类似于Nginx的网址重定向,但zuul的重定向的一般是整个spring cloud里在Eureka注册中心的模块。
2)zuul更重要的功能为过滤请求。
3、修改网关工程。
创建此工程和Consumer服务基本一样,都是客户端。
设置组织名称、包名等
设置要导入的jar包
4、修改导入jar包
修改pom.xml如下:
Spring Boot版本改成:1.5.6.RELEASE
Spring Cloud版本改成:Dalston.SR4
Spring Cloud客户端的包定位改成:spring-cloud-starter-eureka
Spring Cloud网关的包增加:spring-cloud-starter-zuul
示例如下:
<!--第一处改Spring Boot版本改成 1.5.6.RELEASE -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.6.RELEASE</version>
<relativePath/>
</parent>
<!--第二处改Spring Cloud版本改成 Dalston.SR4 -->
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Dalston.SR4</spring-cloud.version>
</properties>
<!--第三处改客户端包定位 spring-cloud-starter-eureka -->
<dependency>
<groupId