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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 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)为用户提供服务。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
15天前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
31 4
|
7天前
|
自然语言处理 Java API
Spring Boot 接入大模型实战:通义千问赋能智能应用快速构建
【10月更文挑战第23天】在人工智能(AI)技术飞速发展的今天,大模型如通义千问(阿里云推出的生成式对话引擎)等已成为推动智能应用创新的重要力量。然而,对于许多开发者而言,如何高效、便捷地接入这些大模型并构建出功能丰富的智能应用仍是一个挑战。
39 6
|
8天前
|
XML Java 数据格式
提升效率!Spring Boot 开发中的常见失误轻松规避
本文深入探讨了在 Spring Boot 开发中常见的失误,包括不当使用注解、不良异常处理、低效日志记录等,提供了有效的规避策略,帮助开发者提升代码质量和系统性能,构建更健壮、高效的应用程序。
|
11天前
|
缓存 NoSQL Java
Spring Boot与Redis:整合与实战
【10月更文挑战第15天】本文介绍了如何在Spring Boot项目中整合Redis,通过一个电商商品推荐系统的案例,详细展示了从添加依赖、配置连接信息到创建配置类的具体步骤。实战部分演示了如何利用Redis缓存提高系统响应速度,减少数据库访问压力,从而提升用户体验。
31 2
|
2月前
|
人工智能 开发框架 Java
重磅发布!AI 驱动的 Java 开发框架:Spring AI Alibaba
随着生成式 AI 的快速发展,基于 AI 开发框架构建 AI 应用的诉求迅速增长,涌现出了包括 LangChain、LlamaIndex 等开发框架,但大部分框架只提供了 Python 语言的实现。但这些开发框架对于国内习惯了 Spring 开发范式的 Java 开发者而言,并非十分友好和丝滑。因此,我们基于 Spring AI 发布并快速演进 Spring AI Alibaba,通过提供一种方便的 API 抽象,帮助 Java 开发者简化 AI 应用的开发。同时,提供了完整的开源配套,包括可观测、网关、消息队列、配置中心等。
1689 14
|
23天前
|
Java 数据库连接 Spring
【2021Spring编程实战笔记】Spring开发分享~(下)
【2021Spring编程实战笔记】Spring开发分享~(下)
25 1
|
2月前
|
负载均衡 Java 网络架构
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
实现微服务网关:Zuul与Spring Cloud Gateway的比较分析
66 5
|
13天前
|
XML Java 数据格式
Spring IOC容器的深度解析及实战应用
【10月更文挑战第14天】在软件工程中,随着系统规模的扩大,对象间的依赖关系变得越来越复杂,这导致了系统的高耦合度,增加了开发和维护的难度。为解决这一问题,Michael Mattson在1996年提出了IOC(Inversion of Control,控制反转)理论,旨在降低对象间的耦合度,提高系统的灵活性和可维护性。Spring框架正是基于这一理论,通过IOC容器实现了对象间的依赖注入和生命周期管理。
40 0
|
19天前
|
开发框架 Java API
「SpringBrick快速入门指南」:一款基于Spring Boot的高级插件化开发框架
「SpringBrick快速入门指南」:一款基于Spring Boot的高级插件化开发框架
34 0
|
19天前
|
XML Java 数据格式
手动开发-简单的Spring基于注解配置的程序--源码解析
手动开发-简单的Spring基于注解配置的程序--源码解析
34 0