Spring Cloud Zuul-学习笔记
Spring Cloud Zuul
使用SpringBoot2 开发的基于Spring Framework 5开发的Gateway框架,用于替代 Netflix zuul
介绍
网关的功能
让客户端只需要访问一个服务地址
保护网内的服务调用安全
实现了 监控、弹性和安全性的路由
过滤器完成以下功能
跨域问题
只要访问网关就能解决跨域问题
身份认证与安全
审查监控
动态路由
压力测试
负载分配
静态响应处理
多区域弹性
实现方案
- Nginx + Lua
- Kong
- Traefik
- Spring Cloud Netflix Zuul
- Spring Cloud Gateway
网关的工作方式
搭建方式
创建一个注册中心
创建一个Product
创建一个Order 用Feing
搭建一个nginx 负载均衡到多个Gateway
使用zuul
manven中引入 org.springframework.cloud spring-cloud-starter-netflix-zuul包
application.yml
1
2
3
4zuul:
ignoredServices: '*'
routes:
users: /myusers/** # myusers是前缀Application启动类上加入
@EnableZuulProxy
application.yml中添加路由规则
1
2
3
4
5zuul:
routes:
users: # 自定义ID 可以有多个
path: /myusers/** # URL映射路径
serviceId: users_service #eureka的注册中心的ID由于已经有了 Web Actuator hystrix ribbon 所以这些都不必添加了
pom.xml 全文
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/>
</parent>
<groupId>org.akachi.eurekademo</groupId>
<artifactId>zuul-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>zuul-service</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>11</java.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.0.0.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>application.yml 全文
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19server:
port: ${SERVICE_PORT:18880}
spring:
application:
name: zuul-service
main:
allow-bean-definition-overriding: true
eureka:
client:
register-with-eureka: true # 将自己注册到注册中心 默认 true
fetch-registry: true # 是否从注册中心获取服务注册信息 默认true
service-url:
defaultZone: http://root:123456@localhost:18761/eureka/,http://root:123456@localhost:18762/eureka/,http://root:123456@localhost:18763/eureka/
registry-fetch-interval-seconds: 1000 # 表示 eureka Client 间隔多久去服务器拉取注册信息,默认为 30 秒。
zuul:
routes:
eurekademo-service-product: # 自定义ID 可以有多个
path: /product/** # URL映射路径
serviceId: eurekademo-service-product #eureka的注册中心的ID由于约定大于配置其实不必配置zuul rules也可以通过刚才的地址访问(只要集成eureka)
路由配置
1 | zuul: |
过滤器
过滤类型
- pre 配置路径与配置路由规则 找到需要转发的目标地址
- 身份认证
- 选择路由
- 请求日志
- routing 转发请求通过routing来完成
- post 是返回信息
- 对响应增加http头
- 收集统计度量指标
- 将响应以流的方式发送回客户端
- error 任意过程出现问题都会转到error
关键名词
- 执行顺序 integer中数值越小越先执行,同类型之间进行排序,不同类型的执行顺序是 pre>routing>post
- 条件,可以开关过滤器
- 动作: 执行符合条件的动作
参考资料
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Comment