1、简介
Zuul 是 Netflix 开源的微服务网关,Spring Cloud 对 Zuul 进行了整合和增强。在 SpringCloud 体系中,Zuul 担任着网关的角色,对发送到服务端的请求进行一些预处理,比如安全验证、动态路由、负载分配等。
- Zuul 的核心是 Filters,根据执行时期分为以下几类:
- PRE:这种过滤器在请求被路由之前调用
- ROUTING:这种过滤器将请求路由到微服务
- POST:这种过滤器在路由到微服务以后执行
- ERROR:在其他阶段发生错误时执行该过滤器
2、zuul的静态路由
添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>
开启注解支持
@EnableZuulProxy // 开启Zuul的网关功能
添加配置
server:
port: 8086
zuul:
routes:
user-service:
path: /user-service/**
url: http://localhost:8081/
注解:当访问user-service/**的时候,统统把请求转发到8081上面去
例如: user-service/stu/find/1--》127.0.0.1:8081/stu/find/1
3、zuul的动态路由
在静态路由的基础上添加uereka的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
在启动类上添加eureka客户端支持
@EnableDiscoveryClient
添加eureka配置
eureka:
client:
service-url:
defaultZone: http://127.0.0.1:8888/eureka
registry-fetch-interval-seconds: 5 #获取服务列表
instance:
prefer-ip-address: true
ip-address: 127.0.0.1
instance-id: ${spring.application.name}:${server.port}
spring:
application:
name: api-gatewar
修改原有静态路由的配置值
zuul:
routes:
user-service: # 这里是路由id,随意写
path: /user-service/** # 这里是映射路径
serviceId: user-service # 指定服务名称
4、其他配置说明
简化配置
zuul:
routes:
user-service: /user-service/** # 前面是服务名称,后面是映射路径
默认配置
默认情况下,一切服务的映射路径就是服务名本身。
例如服务名为:user-service,则默认的映射路径就是:/user-service/**
路由前缀
zuul:
prefix: /api # 添加路由前缀
routes:
user-service: # 这里是路由id,随意写
path: /user-service/** # 这里是映射路径
service-id: user-service # 指定服务名称
解释:我们通过zuul.prefix=/api来指定了路由的前缀,这样在发起请求时,路径就要以/api开头。路径/api/user-service/user/1将会被代理到/user-service/user/1
浏览器访问路径
http://localhost:8086/user-client/feign
user-client:表示服务的ID
feign :调用方法的路径