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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: Apollo是携程研发的开源配置管理中心,能够集中管理应用于不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性。本案例结合一个案例介绍Apollo和Zuul的整合开发。整个应用分为4个微服务项目,分别是Eureka服务器项目mweathereurekaserver、服务提供者项目apolloconfig、服务提供者项目apollouser、服务消费者(即zuul路由服务)项目zuulapollo。

image.png


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所示。

image.png


■ 图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配置中心的命令示例。
js ./demo.sh start
启动Apollo配置中心的命令、过程和结果如图2所示。

image.png

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

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

image.png


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

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

image.png


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

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

image.png


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

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

1●本案例的结构说明

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

image.png


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

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

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

image.png


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


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

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

image.png


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

image.png


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

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

1●新建项目并添加依赖

新建项目apolloconfig,确保在文件pom.xml的和之间添加了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的和之间添加了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的和之间添加了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所示。

image.png


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

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

image.png


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

2●apollouser服务运行结果

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

image.png


image.png

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

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

image.png


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

3●zuulapollo服务运行结果

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

image.png


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

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

image.png


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

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

image.png


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

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

image.png


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

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

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
4天前
|
存储 JavaScript 开发工具
基于HarmonyOS 5.0(NEXT)与SpringCloud架构的跨平台应用开发与服务集成研究【实战】
本次的.HarmonyOS Next ,ArkTS语言,HarmonyOS的元服务和DevEco Studio 开发工具,为开发者提供了构建现代化、轻量化、高性能应用的便捷方式。这些技术和工具将帮助开发者更好地适应未来的智能设备和服务提供方式。
基于HarmonyOS 5.0(NEXT)与SpringCloud架构的跨平台应用开发与服务集成研究【实战】
|
16天前
|
XML JSON Java
Spring Boot 开发中常见的错误
本文总结了 Java 开发中常见的几个问题及其改进方法,包括:1. 过度使用 `@Component` 注解;2. `@ResponseBody` 注解的错误用法;3. `@Autowired` 的不当使用;4. `application.properties` 管理不善;5. 异常处理不当。每部分详细解释了错误情况和建议的改进方案,并提供了相应的代码示例。
47 11
|
9天前
|
人工智能 前端开发 Java
Spring AI Alibaba + 通义千问,开发AI应用如此简单!!!
本文介绍了如何使用Spring AI Alibaba开发一个简单的AI对话应用。通过引入`spring-ai-alibaba-starter`依赖和配置API密钥,结合Spring Boot项目,只需几行代码即可实现与AI模型的交互。具体步骤包括创建Spring Boot项目、编写Controller处理对话请求以及前端页面展示对话内容。此外,文章还介绍了如何通过添加对话记忆功能,使AI能够理解上下文并进行连贯对话。最后,总结了Spring AI为Java开发者带来的便利,简化了AI应用的开发流程。
180 0
|
16天前
|
IDE Java 测试技术
互联网应用主流框架整合之Spring Boot开发
通过本文的介绍,我们详细探讨了Spring Boot开发的核心概念和实践方法,包括项目结构、数据访问层、服务层、控制层、配置管理、单元测试以及部署与运行。Spring Boot通过简化配置和强大的生态系统,使得互联网应用的开发更加高效和可靠。希望本文能够帮助开发者快速掌握Spring Boot,并在实际项目中灵活应用。
34 5
|
14天前
|
前端开发 Java 开发者
这款免费 IDEA 插件让你开发 Spring 程序更简单
Feign-Helper 是一款支持 Spring 框架的 IDEA 免费插件,提供 URL 快速搜索、Spring Web Controller 路径一键复制及 Feign 与 Controller 接口互相导航等功能,极大提升了开发效率。
|
1月前
|
消息中间件 监控 Java
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
35 6
|
1月前
|
Java 关系型数据库 MySQL
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
56 5
|
1月前
|
缓存 监控 Java
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
40 5
|
2月前
|
前端开发 JavaScript Java
如何使用 Spring Boot 和 Angular 开发全栈应用程序:全面指南
如何使用 Spring Boot 和 Angular 开发全栈应用程序:全面指南
45 1
|
21天前
|
XML Java 数据格式
Spring Boot 开发中的常见失误
本文深入分析了Spring Boot开发中常见的失误,包括不当使用@Component、@ResponseBody、@Autowired注解,以及不良的异常处理和日志记录实践,提供了有效的规避策略,帮助开发者提升代码质量和系统性能。