什么是ZUUL?
1.ZUUL是一种网关技术。
2.所有的URL均不对外暴露,只留下网关作为对外的唯一接口。
3.请求使用网关对外提供的路由,经过网关的解析转发到对应接口,进行调度和过滤。
4.高级使用:
1).路由规则
2).熔断机制
3).服务聚合
总结:ZUUL通过路由规则配置,隐蔽接口,通过相应的规则,将请求转发到对应的接口。
ZUUL的搭建:(新建一个Eureka客户端项目:)
1.添加依赖:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
<version>2.2.10.RELEASE</version>
</dependency>
<dependency>
<groupId>com.netflix.zuul</groupId>
<artifactId>zuul-core</artifactId>
<version>1.3.0</version>
</dependency>
</dependencies>
2.配置文件:
server:
port: 9100
spring:
application:
name: zuul
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/ #当前zuul网关想要注册到哪个注册中心
#路由规则定义。这里定义两种路由规则route1和route2
#,代表访问网关/test01/**或/test02/**时。
#路由到服务名为 eurekaservice1或 eureka
#service2中的服务集群去。
zuul:
routes:
baidu:
#自定义名称 支持配置多个
defin-url-route:
#配置开放出来的RUL (所有/zuul-test开头的请求都会被转发到注册中心id为;eruekaClient的服务中)
path: /zuul-test/**
#注册中心的服务名称 转发到哪个服务
serviceId: eurekaClient
#访问 http://localhost:port/zuul-test/test ===> 转发到 eurekaClient上的test
3.开启网关特性:
1.启动类添加@EnableZuulProxy注解,开启网关特性。
2.启动服务,如果服务注册到Eureka注册中心后即表示搭建成功。
4.ZUUL访问:
1.通过以上配置达到如下效果:
#访问 http://localhost:port/zuul-test/test ===> 转发到 eurekaClient上的test
5.待完善:
1.路由配置
zuul:
routes:
baidu:
#自定义名称 支持配置多个
defin-url-route:
#配置开放出来的RUL (所有/zuul-test开头的请求都会被转发到注册中心id为;eruekaClient的服务中)
path: /zuul-test/**
#注册中心的服务名称 转发到哪个服务
serviceId: eurekaClient
2.单实例URL配置
### 网关配置
zuul:
# 路由信息配置
routes:
# 针对某个服务的配置,可自定义
defin-url-route:
# 访问的路径
path: /do/**
# defin-url-route 的地址
url: http://localhost:port
3.多实例配置
zuul:
# 路由信息配置
routes:
# 针对某个服务的配置,可自定义
defin-url-route-01:
# 访问的路径
path: /do01/**
# defin-url-route 的地址
url: http://localhost:port
defin-url-route-02:
# 访问的路径
path: /do02/**
# defin-url-route 的地址
url: http://localhost:port
4.忽略表达式
1).Zuul 提供了一个忽略表达式参数 zuul.ignored-patterns,可以用来设置不希望被 API 网关进行路由的 URL 表达式。
2).zuul:
ignored-patterns=/**/hello/**
routes:
user-service:
path: /user-service/**
user-service:
service-id=user-service
3).经过如上设置,访问 http://localhost:port/user-service/hello后将无法找到该请求。
5.路由前缀
zuul:
routes:
#自定义实例名称
api-user:
#路由配置
path: /user/**
#注册中心中的服务id
service-id: user-service
#截断前缀设置
strip-prefix: false
**(经过如上设置,路由前缀不会被ZUUL自动截断)**
ZUUL通配符:
/** :匹配任意数量的路径与字符 /client/add,/client/a,/client/a/b/c
/* :匹配任意数量的字符 /client/add,/client/a,/client/abc
/? :匹配单个字符 /client/a,/client/b,/client/c
总结:
1.ZUUL类似于一种URL过滤及转发器,将请求由网关统一进行调配。
2.如果请求URL符合网关中的配置,则转发到相应的请求。
3.如果不符合,即被网关过滤。