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

zuul-api-gateway.png

步骤 5: 单击 Generate 按钮。它开始将项目打包成 zip 文件并下载。

zuul-api-gateway-1.png

步骤 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  

标签: spring, Spring教程, spring cloud, spring cloud教程, spring cloud框架, spring cloud面试题, springcloud组件, springcloud微服务架构, springcloud入门教程, springcloud主件, spring cloud架构图