文章插图
文章插图
第二步,创建配置 。
文章插图
第三步,发布 。
文章插图
4.8 测试启动项目apollo-demo,然后请求路径http://localhost:8888/apollo/getConfig,可以看到:
文章插图
控制台可以看到推送配置信息的日志:
文章插图
五、架构设计讲完了安装和SpringBoot整合的demo后,我们是时候探究一下原理,为什么要有三个服务,又是如何做到配置信息发布后,客户端实时获取到最新的配置的 。继续往下看 。
首先看一张官网的架构设计图 。
5.1 基础模型作者在官网上有个基础模型的架构图,忽略掉很多细节后实际上非常简单:
文章插图
- 用户在配置中心对配置进行修改并发布 。
- 配置中心通知Apollo客户端有配置更新 。
- Apollo客户端从配置中心拉取最新的配置、更新本地配置并通知到应用 。
文章插图
看到这里,整个架构看起来就比较清晰了 。接下来从上往下简单介绍一下:
Portal服务:提供Web界面供用户管理配置,通过MetaServer获取AdminService服务列表(IP+Port),通过IP+Port访问AdminService服务 。
Client:实际上就是我们创建的SpringBoot项目,引入ApolloClient的maven依赖,为应用提供配置获取、实时更新等功能 。
Meta Server:从Eureka获取Config Service和Admin Service的服务信息,相当于是一个Eureka Client 。主要是为了封装服务发现的细节,对Portal和Client而言,永远通过一个Http接口获取Admin Service和Config Service的服务信息,而不需要关心背后实际的服务注册和发现组件 。Meta Server只是一个逻辑角色,在部署时和Config Service是在一个JVM进程中的,所以IP、端口和Config Service一致 。
Eureka:注册中心 。Config Service和Admin Service会向Eureka注册服务 。为了简单起见,目前Eureka在部署时和Config Service是在一个JVM进程中的 。
Config Service:提供配置获取接口 。提供配置更新推送接口(基于Http long polling) 。服务对象为Apollo客户端(Client) 。
Admin Service:提供配置管理接口 。提供配置发布、修改等接口 。服务对象为Portal 。
5.3 配置发布后的实时推送设计上面讲完各个角色的用途,那这些角色是怎么配合一起工作的呢,我们来看一张图:
文章插图
上图简要描述了配置发布的大致过程:
- 用户在Portal操作配置发布 。
- Portal调用Admin Service的接口操作发布 。
- Admin Service发布配置后,发送ReleaseMessage给各个Config Service 。
- Config Service收到ReleaseMessage后,通知对应的客户端(Client) 。
答案在于:
- Admin Service在配置发布后会往ReleaseMessage表插入一条消息记录,消息内容就是配置发布的AppId+Cluster+Namespace 。
- 然后Config Service有一个线程会每秒扫描一次ReleaseMessage表,看看是否有新的消息记录 。
- Config Service如果发现有新的消息记录,那么就会通知到所有的消息监听器,监听器得到配置发布的AppId+Cluster+Namespace后,会通知对应的客户端 。
文章插图
在实现上,考虑到Apollo的实际使用场景,以及为了尽可能减少外部依赖,我们没有采用外部的消息中间件,而是通过数据库实现了一个简单的消息队列 。----来自官网5.4 高可用Apollo为了实现高可用,服务端使用了Eureka作为注册中心,这一点在官网也有谈到 。
推荐阅读
- Linux中/etc/passwd配置文件详解
- 小米笔记本m3处理器怎么样 小米i5笔记本电脑配置
- 一篇文章实现vue集成axios、调用、跨域、配置多个跨域
- 使用IDEA连接mysql数据库
- Artifactory制品库的密码管理及策略配置
- 交换机的基本配置方法
- 自动化配置管理工具-Chef
- MPLS基础及MPLS静态LSP配置
- H3C S5500、F1060配置IRF2
- Nginx系列:https配置