zuul简介
zuul是Netflix开源的微服务网关,包含了对请求的路由和过滤两个主要的功能
- 路由,负责将外部请求转发到具体的微服务实例上,实现外部访问统一入口的基础
- 过滤,负责对请求的过程进行干预,实现请求校验、服务聚合等功能
将zuul注册到注册中心中,同时从注册中心中获取其他微服务的消息,之后访问其他微服务都是通过zuul进行跳转的
zuul的性能一般,采用了同步编程模型,对于IO密集型的服务如果处理时间过长会导致将servlet的线程池占满
其核心是一系列过滤器,这些过滤器可以完成很多功能,如
- 身份认证与安全,识别每个资源的验证要求
- 审查与监控,在边缘位置追踪有意义的数据和统计结果,从而带来精确的生产视图
- 动态路由,动态的将请求路由到不同的后端集群
- 负载均衡,为每一种负载均衡分配对应容量,并弃用超过限定值的请求
- 静态响应处理,在边缘位置直接建立部分响应,从而避免其转发到内部集群
特性
- 基于阻塞IO的API网关
- 基于Servlet2.5,不支持长连接,每次IO操作都是从工作线程中选择一个执行,请求线程被阻塞直到工作线程完成
依赖
1 | <!-- zuul路由网关 --> |
如果是F版及以上的话,需要使用该依赖
1 | <dependency> |
启动类配置
1 |
|
就可以直接通过网关来路由到其他微服务了
1 | 默认情况下 http://zuul网关的ip:zuul网关的端口/所要访问的微服务名/对应微服务中的uri |
自定义路由规则
1 | # zuul网关配置 |
此时访问的话
1 | http://localhost:9527/demo/deptService/dept/get/1 |
其开启了routes端点,可以访问/routes来看到配置的微服务映射
其默认使用的HTTP客户端是Apache HTTP Client,如果想使用其他httpClient可以进行如下配置
1 | # 如果使用RestClient则配置 |