API网关之Zuul
引言
Zuul is the front door for all requests from devices and web sites to the backend of the Netflix streaming application. As an edge service application, Zuul is built to enable dynamic routing, monitoring, resiliency and security. It also has the ability to route requests to multiple Amazon Auto Scaling Groups as appropriate.
—— Zuul 官方wiki
Zuul 简介
Zuul 是 Netflix OOS 中的一员,是一个基于 JVM 路由和服务端的负载均衡。提供路由、监控、弹性、安全等方面的服务框架。Zuul 能够与 Eureka 、Ribbon 、Hystrix 等组件配合使用。
Zuul 的核心是过滤器,通过这些过滤器我们可以扩展出很多功能,比如:
- 动态路由:动态的将客户端的请求路由到后端的不同服务,做一些逻辑处理,比如聚合多个服务的数据返回。
- 请求监控:可以对整个系统的请求进行监控,记录详细的请求响应日志,可以实时统计出当前系统的访问量以及监控状态。
- 认证鉴权:对每一个访问的请求做认证,拒绝非法请求,保护好后端的服务。
- 压力测试:压力测试是一项很重要的工作,像电商公司需要模拟更多的真实的用户并发量来保证重大活动时系统的稳定。通过 Zuul 可以动态地将请求转发到后端服务的集群中,还可以识别测试流量和真实流量,从而做一些特殊处理。
- 灰度发布:灰度发布可以保证系统的稳定,在初始灰度的时候就可以发现、调整问题、以保证其影响度。
——《spring cloud 微服务 入门、进阶与实战》第103页
使用 Zuul 构建微服务网关
简单使用
建立一个 spring cloud 项目。配置如下:
- pom添加依赖
1 | <dependency> |
- properties 配置:
1 | spring.application.name=zuul-demo |
- 启动类加上 @EnableZuulProxy 注解
1 |
|
启动项目我们访问:http://localhost:2103/demo1/myblog
结果跳转到了我的博客:https://blog.wu-zy.com/myblog/
集成 Eurekas
结合 Eureka 实现动态路由
- 加入 Eureka 的依赖
1 | <dependency> |
- 配置注册中心
1 | #注册中心集群 |