Spring Cloud教程-Zuul API 网关
Zuul API 网关
什么是 Zuul?
Zuul 服务器是一个 API 网关应用程序。它处理所有请求并执行微服务应用程序的动态路由。它充当所有请求的前门,也被称为边缘服务器。
Zuul 的设计目的是实现动态路由、监控、弹性和安全性。它还可以将请求路由到多个Amazon Auto Scaling 组。
例如,/api/products 映射到 product 服务,而 /api/user 映射到 user 服务。Zuul 服务器会动态将请求路由到相应的后端应用程序。
为什么要使用 Zuul?
Netflix 的 API 流量的规模和多样性有时会导致生产问题,这些问题会迅速而突然地出现。因此,我们需要一个允许我们快速更改行为以应对这些情况的系统。
Zuul 提供了各种不同类型的过滤器,允许我们迅速而灵活地将功能应用于我们的边缘服务。这些过滤器执行以下功能:
- 身份验证和安全性: 为每个资源提供身份验证要求。
- 洞察和监控: 跟踪有意义的数据和统计信息,为我们提供准确的生产视图。
- 动态路由: 根据需要动态将请求路由到不同的后端集群。
- 压力测试: 增加到集群的流量以测试性能。
- 负载分配: 为每种类型的请求分配容量,并拒绝超过限制的请求。
- 静态响应处理: 在边缘直接构建某些响应,而不是将其转发到内部集群。
- 多区域弹性: 路由请求跨越 AWS 区域,以分散我们 ELB 的使用。
Zuul 组件
Zuul 2.x 组件:
- zuul-core: 包含 Zuul 2.0 核心功能的库。
- zuul-sample: 用于 Zuul 2.0 的示例驱动程序应用程序。
Zuul 1.x 组件:
- zuul-core: 定义核心功能。
- zuul-simple-webapp: 显示如何使用 zuul-core 构建应用程序的简单示例 Web 应用程序。
- zuul-netflix: 将其他 NetflixOSS 组件添加到 Zuul 中的库。
- zuul-netflix-webapp: 打包 zuul-core 和 zuul-netflix 的 Web 应用程序。
配置 Zuul API 网关服务器
设置 Zuul API 网关有三个步骤:
- 创建 Zuul API 网关的组件。
- 确定 Zuul API 网关应该执行的任务。
- 配置所有重要的请求通过 Zuul API 网关。
按照以下步骤设置 Zuul API 网关服务器。
步骤 1: 打开 Spring Initializr https://start.spring.io。
步骤 2: 提供 Group 名称。我们提供了 cn.javatiku.microservices。
步骤 3: 提供 Artifact。我们提供了 netflix-zuul-api-gateway-server。
步骤 4: 添加以下依赖项:Zuul, Eureka Discovery, Actuator, 和 DevTools。
步骤 5: 单击 Generate 按钮。它开始将项目打包成 zip 文件并下载。
步骤 6: 解压缩 zip 文件并将其粘贴到 Spring Tool Suite 的工作区中。
步骤 7: 在 STS IDE 中导入项目。
文件 -> 导入 -> 存在的 Maven 项目 -> 浏览 -> 选择 netflix-zuul-api-gateway-server -> 选择文件夹 -> 完成
导入需要一些时间。
步骤 8: 打开 NetflixZuulApiGatewayServerApplication.java 文件,并使用注解 @EnableZuulProxy 和 @EnableDiscoveryClient 启用 Zuul 代理和发现客户端,如下所示。
NetflixZuulApiGatewayServerApplication.java
package cn.javatiku.microservices.netflixzuulapigatewayserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
@EnableZuulProxy
@EnableDiscoveryClient
@SpringBootApplication
public class NetflixZuulApiGatewayServerApplication
{
public static void main(String[] args)
{
SpringApplication.run(NetflixZuulApiGatewayServerApplication.class, args);
}
}
步骤 9: 打开 application.properties 文件并配置应用程序名称、端口和Eureka 命名服务器。
application.properties
spring.application.name=netflix-zuul-api-gateway-server
server.port=8765
eureka.client.service-url.default-zone=http://localhost:8765/eureka