返回介绍

6.2 Spring Cloud 和 Netflix Zuul 简介

发布于 2025-04-22 21:54:07 字数 3018 浏览 0 评论 0 收藏

Spring Cloud 集成了 Netflix 开源项目 Zuul。Zuul 是一个服务网关,它非常容易通过 Spring Cloud 注解进行创建和使用。Zuul 提供了许多功能,具体包括以下几个。

  • 将应用程序中的所有服务的路由映射到一个 URL ——Zuul 不局限于一个 URL。在 Zuul 中,开发人员可以定义多个路由条目,使路由映射非常细粒度(每个服务端点都有自己的路由映射)。然而,Zuul 最常见的用例是构建一个单一的入口点,所有服务客户端调用都将经过这个入口点。
  • 构建可以对通过网关的请求进行检查和操作的过滤器 ——这些过滤器允许开发人员在代码中注入策略执行点,以一致的方式对所有服务调用执行大量操作。

要开始使用 Zuul,需要完成下面 3 件事。

(1)建立一个 Zuul Spring Boot 项目,并配置适当的 Maven 依赖项。

(2)使用 Spring Cloud 注解修改这个 Spring Boot 项目,将其声明为 Zuul 服务。

(3)配置 Zuul 以便 Eureka 进行通信(可选)。

6.2.1 建立一个 Zuul Spring Boot 项目

如果读者在本书中按顺序读了前几章,应该会对接下来要做的工作很熟悉。要构建一个 Zuul 服务器,需要建立一个新的 Spring Boot 服务并定义相应的 Maven 依赖项。读者可以在本书的 GitHub 存储库中找到本章的项目源代码。幸运的是,在 Maven 中建立 Zuul 只需要很少的步骤,只需要在 zuulsvr/pom.xml 文件中定义一个依赖项:

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-zuul</artifactId>
</dependency>

这个依赖项告诉 Spring Cloud 框架,该服务将运行 Zuul,并适当地初始化 Zuul。

6.2.2 为 Zuul 服务使用 Spring Cloud 注解

在定义完 Maven 依赖项后,需要为 Zuul 服务的引导类添加注解。Zuul 服务实现的引导类可以在 zuulsvr/src/main/java/com/thoughtmechanix/zuulsvr/Application.java 中找到。代码清单 6-1 展示了如何为 Zuul 服务的引导类添加注解。

代码清单 6-1 创建 Zuul 服务器引导类

package com.thoughtmechanix.zuulsvr;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
@EnableZuulProxy  ⇽--- 使服务成为一个 Zuul 服务器
public class ZuulServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ZuulServerApplication.class, args);
    }
}

就这样,这里只需要一个注解: @EnableZuulProxy

注意

如果读者浏览过文档或启用了自动补全,那么可能会注意到一个名为 @EnableZuulServer 的注解。使用此注解将创建一个 Zuul 服务器,它不会加载任何 Zuul 反向代理过滤器,也不会使用 Netflix Eureka 进行服务发现(我们将很快进入 Zuul 和 Eureka 集成的主题)。开发人员想要构建自己的路由服务,而不使用任何 Zuul 预置的功能时会使用 @EnableZuulServer ,举例来讲,当开发人员需要使用 Zuul 与 Eureka 之外的其他服务发现引擎(如 Consul)进行集成的时候。本书只会使用 @EnableZuulProxy 注解。

6.2.3 配置 Zuul 与 Eureka 进行通信

Zuul 代理服务器默认设计为在 Spring 产品上工作。因此,Zuul 将自动使用 Eureka 来通过服务 ID 查找服务,然后使用 Netflix Ribbon 对来自 Zuul 的请求进行客户端负载均衡。

注意

我经常不按顺序阅读书中的章节,而是会跳到我最感兴趣的主题上。如果读者也这么做,并且不知道 Netflix Eureka 和 Ribbon 是什么,那么,我建议读者先阅读第 4 章,然后再进行下一步。Zuul 大量采用这些技术进行工作,因此了解 Eureka 和 Ribbon 带来的服务发现功能会更容易理解 Zuul。

配置过程的最后一步是修改 Zuul 服务器的 zuulsvr/src/main/resources/application.yml 文件,以指向 Eureka 服务器。代码清单 6-2 展示了 Zuul 与 Eureka 通信所需的 Zuul 配置。代码清单 6-2 中的配置应该看起来很熟悉,因为它与第 4 章中介绍的配置相同。

代码清单 6-2 配置 Zuul 服务器与 Eureka 通信

eureka:
  instance:
    preferIpAddress: true
  client:
    registerWithEureka: true
    fetchRegistry: true
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。