0%

zuul简介

zuul简介

zuul作为微服务的网关,包含了对请求的路由和过滤两个主要的功能

  • 路由,负责将外部请求转发到具体的微服务实例上,实现外部访问统一入口的基础
  • 过滤,负责对请求的过程进行干预,实现请求校验、服务聚合等功能

将zuul注册到注册中心中,同时从注册中心中获取其他微服务的消息,之后访问其他微服务都是通过zuul进行跳转的

zuul的性能一般,采用了同步编程模型,对于IO密集型的服务如果处理时间过长会导致将servlet的线程池占满

特性

  • 基于阻塞IO的API网关
  • 基于Servlet2.5,不支持长连接,每次IO操作都是从工作线程中选择一个执行,请求线程被阻塞直到工作线程完成

依赖

1
2
3
4
5
<!-- zuul路由网关 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>

如果是F版及以上的话,需要使用该依赖

1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
</dependency>

启动类配置

1
2
3
4
5
6
7
8
9
@SpringBootApplication
@EnableEurekaClient // 服务启动后注册到Eureka Server注册中心中
@EnableZuulProxy // 启用zuul
public class ProviderApp {

public static void main(String[] args) {
SpringApplication.run(ProviderApp.class,args);
}
}

就可以直接通过网关来路由到其他微服务了

1
默认情况下 http://zuul网关的ip:zuul网关的端口/所要访问的微服务名/对应微服务中的uri

自定义路由规则

1
2
3
4
5
6
7
8
9
10
11
12
13
14
# zuul网关配置
zuul:
retryable: false #关闭重试机制
sensitive-headers: #针对所有服务,设置敏感头信息
routes:
deptService: # 路由规则名称
serviceId: micro-service-dept-provider # 微服务名
path: /deptService/** #匹配的路径
sensitive-headers: #针对单个服务,敏感头信息,默认是Cookie, Set-Cookie, Authorization,如果此处不填的话,辨识取消敏感头信息
ignored-services: micro-service-dept-provider #忽略原始使用微服务名就可以访问的路由规则,如果是所有的微服务都忽略,则使用*
ignored-patterns:
- /userService/userEdit # 该地址不进行匹配
- /orderService/** # 使用通配符匹配,去掉orderService下的所有接口
prefix: /demo # 公共前缀,访问时需要在访问uri之前加上统一的前缀

此时访问的话

1
http://localhost:9527/demo/deptService/dept/get/1