写点什么

Spring Cloud 实战案例 │ Apollo 和 Zuul 的整合开发

作者:TiAmo
  • 2023-08-04
    江苏
  • 本文字数:2831 字

    阅读完需:约 9 分钟

Spring Cloud实战案例 │ Apollo和Zuul的整合开发

Apollo 是携程研发的开源配置管理中心,能够集中管理应用于不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。

本案例结合一个案例介绍 Apollo 和 Zuul 的整合开发。整个应用分为 4 个微服务项目,分别是 Eureka 服务器项目 mweathereurekaserver、服务提供者项目 apolloconfig、服务提供者项目 apollouser、服务消费者(即 zuul 路由服务)项目 zuulapollo。

1、Apollo 配置中心的准备和启动

1●Apollo 配置中心的准备

为了让大家更快地了解 Apollo 配置中心(或称为服务器),Apollo 研发者准备了一个 Quick Start 项目,通过该项目能够在几分钟内部署和启动 Apollo 配置中心。先从 Quick Start 的代码库(https://github.com/nobodyiam/apollo-build-scripts)中下载该项目的代码压缩包并进行解压缩。解压缩后的目录和文件如图 1 所示。


■ 图 1 解压缩后 apollo-builds-scripts-master 文件夹内的文件和目录

使用 Apollo 时先要确保安装的 Java 版本在 1.8 以上,安装的 MySQL 版本在 5.6.5 以上。由于 Quick Start 需要用到 Git Bash 环境,需要安装 Git Bash(或者直接使用 IDE 的 Git Bash 环境)。

Apollo 服务端需要两个数据库:ApolloPortalDB 和 ApolloConfigDB。通过 Navicat for MySQL 或 MySQL 原生客户端,导入解压缩包里 sql 目录下的文件 apolloportaldb.sql 和文件 apolloconfigdb.sql。

Apollo 服务端需要知道如何连接到前面创建的两个数据库,所以需要修改文件 demo.sh 中数据库连接信息。将 root 的用户名和密码改为您自己的 MySQL 的 root 用户名和密码。

2●Apollo 配置中心的启动

在目录 apollo-builds-scripts-master 下启动 Git Bash,执行如例 E-1 所示的命令启动 Apollo 配置中心。

【例 1】启动 Apollo 配置中心的命令示例。

./demo.sh start
复制代码

启动 Apollo 配置中心的命令、过程和结果如图 2 所示。



■ 图 2 Apollo 配置中心的启动命令、过程和结果

在浏览器中输入 localhost:8070,结果如图 3 所示。



■ 图 3 在浏览器中输入 localhost:8070 的结果

在图 3 中输入正确的 Username(初始值为 apollo)和 Password(初始值为 admin)后,结果如图 4 所示,显示已有一个项目默认 SampleApp。



■ 图 4 在图 3 中输入正确 Username 和 Password 后的结果

SampleApp 项目的基本信息如图 5 所示。



■ 图 5 默认项目 SampleApp 的基本信息


2、本案例的结构说明和 Apollo 配置中心的内容设置


1●本案例的结构说明

        本案例的微服务之间的关系,如图 6 所示。zuul 项目(zuulapollo)、Apollo 配置中心(或称为配置中心)以及服务提供者项目 apolloconfig 和 apollouser 都要用到 Eureka 服务器。服务提供者项目 apolloconfig、apollouser 和 zuul 项目都要用到 Apollo 配置中心上的配置信息。用户访问微服务时,根据用户的不同由 zuul 项目将微服务 apolloconfig 或微服务 apollouser 分配给用户。本案例中用户除了可以访问 zuul 项目之外还可以直接访问项目 apolloconfig 或 apollouser(正式情况下一般不能直接访问微服务)。为了对比,项目 apolloconfig 或 apollouser 均提供了返回文本内容和返回视图两类接口。



■ 图 6 本案例的微服务之间的关系


2●Apollo 配置中心的内容设置

在 Apollo 配置中心默认项目 SampleApp 中,增加如表 1 所示的配置内容。增加 1 条配置信息(以 admin 为例)的方法是单击项目 SampleApp 后,再单击“新增配置”按钮,弹出“添加配置项”对话框,如图 7 所示。



■ 图 7 “添加配置项”对话框

依次在 Key 文本框和 Value 文本框填写 admin、admin,单击“提交”按钮。

表 1 要在 Apollo 配置中心的默认项目 SampleApp 中增加的配置内容



按照同样方法设置表 1 中其他配置信息,单击“发布”按钮,结果如图 8 所示。



■ 图 8 向项目 SampleApp 增加配置内容并进行发布之后的结果

3、实现服务提供者项目 apolloconfig


1●新建项目并添加依赖

新建项目 apolloconfig,确保在文件 pom.xml 的<dependencies>和</dependencies>之间添加了 Eureka Client、Web、Thymeleaf、Apollo Client 依赖。


2●创建类、文件和修改配置文件

创建类 AppConfig、ACController,并修改这些类的代码。

在目录 src/main/resources/templates 下创建文件 admin.html,并修改其代码。

修改在目录 src/main/resources 下的配置文件 application.properties。


4、实现服务提供者项目 apollouser


1●新建项目并添加依赖

新建项目 apollouser,确保在文件 pom.xml 的<dependencies>和</dependencies>之间添加了 Eureka Client、Web、Thymeleaf、Apollo Client 依赖。


2●创建类、文件和修改配置文件

创建类 AppConfig、ACController,并修改这些类的代码。

在目录 src/main/resources/templates 下创建文件 guest.html,并修改其代码。

修改在目录 src/main/resources 下的配置文件 application.properties。


5、实现 zuul 项目 zuulapollo


1●新建项目并添加依赖

新建项目 zuulapollo,确保在文件 pom.xml 的<dependencies>和</dependencies>之间添加了 Eureka Client、Web、Zuul、Apollo Client 依赖。


2●创建类、修改入口类和配置文件

在包 com.bookcode 中创建类 ZuulPropertiesRefresher,并修改其代码。

修改入口类,增加注解 @EnableApolloConfig 和注解 @EnableZuulProxy。

修改在目录 src/main/resources 下的配置文件 application.properties。


6、程序运行结果

依次运行项目 mweathereurekaserver(端口为 8761)、apolloconfig(服务名称为 apolloconfig,端口为 8765)、apollouser(服务名称为 apollouser,端口为 8760)、zuulapollo(服务名称为 zuulapollo,端口为 8665)。


1●apolloconfig 服务运行结果

在浏览器中输入 localhost:8765/userinfo,结果如图 9 所示。



■ 图 9 在浏览器中输入 localhost:8765/userinfo 的结果

在浏览器中输入 localhost:8765/admin/userinfo,结果如图 10 所示。



■ 图 10 在浏览器中输入 localhost:8765/admin/userinfo 的结果


2●apollouser 服务运行结果

在浏览器中输入 localhost:8760/userinfo,结果如图 11 所示。





■ 图 11 在浏览器中输入 localhost:8760/userinfo 的结果

在浏览器中输入 localhost:8760/guest/userinfo,结果如图 12 所示。



■ 图 12 在浏览器中输入 localhost:8760/guest/userinfo 的结果


3●zuulapollo 服务运行结果

在浏览器中输入 localhost:8665/admin/userinfo,结果如图 13 所示。



■ 图 13 在浏览器中输入 localhost:8665/admin/userinfo 的结果

在浏览器中输入 localhost:8665/admin/admin/userinfo,结果如图 14 所示。对比图 9 和图 13(或图 10 和图 14),可以发现它们结果相同,即 zuul 路由项目 zuulapollo 对 URL 进行了转换处理。



■ 图 14 在浏览器中输入 localhost:8665/admin/admin/userinfo 的结果

在浏览器中输入 localhost:8665/guest/userinfo,结果如图 15 所示。



■ 图 15 在浏览器中输入 localhost:8665/guest/userinfo 的结果

在浏览器中输入 localhost:8665/guest/guest/userinfo,结果如图 16 所示。对比图 11 和图 15(或图 12 和图 16),可以发现它们结果相同,即项目 zuulapollo 对 URL 进行了转换处理。



■ 图 16 在浏览器中输入 localhost:8665/guest/guest/userinfo 的结果

对比图 13 和图 15(或图 14 和图 16),可以发现项目 zuulapollo 对 URL 进行了解析并调用不同的服务(apolloconfig 或者 apollouser)为用户提供服务。

发布于: 6 小时前阅读数: 11
用户头像

TiAmo

关注

有能力爱自己,有余力爱别人! 2022-06-16 加入

CSDN全栈领域优质创作者,万粉博主;阿里云专家博主、星级博主、技术博主、阿里云问答官,阿里云MVP;华为云享专家;华为Iot专家;

评论

发布
暂无评论
Spring Cloud实战案例 │ Apollo和Zuul的整合开发_Spring Cloud_TiAmo_InfoQ写作社区