时间:2022-08-11 11:27:31 | 栏目:.NET代码 | 点击:次
Apollo(阿波罗)是携程框架部研发并开源的一款生产级的配置中心产品,它能够集中管理应用在不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
下面是Apollo架构模块图(来源自于波波微课):
上图简要描述了Apollo的总体设计,我们可以从下往上看:
在配置中心中,一个重要的功能就是配置发布后实时推送到客户端。下面我们简要看一下这块是怎么设计实现的:
Apollo支持应用在不同的环境有不同的配置,所以Environment是另一个从服务器获取配置的重要信息。Environment通过配置文件来指定,文件位置为C:\opt\settings\server.properties,文件内容形如:
env=DEV
目前,env支持以下几个值(大小写不敏感):
Apollo服务端:1.8+
Apollo客户端:1.7+
Java jdk1.8下载地址:https://www.oracle.com/java/technologies/javase/javase-jdk8-downloads.html,这里提醒一下,安装目录名称千万别有空格,不然会Apollo启动时候会报错的。
在配置好后,可以通过如下命令检查:
java -version
配置下环境变量:
版本要求:5.6.5+(MySQL服务端安装我就不说了,自行百度)
Apollo的表结构对timestamp使用了多个default声明,所以需要5.6.5以上版本。
连接上MySQL后,可以通过如下命令检查:
SHOW VARIABLES WHERE Variable_name = 'version';
下载Apollo安装包,大家只需要下载到本地,就可以直接使用,免去了编译、打包过程。
Github下载:https://github.com/nobodyiam/apollo-build-scripts
安装包要58M这么大,是因为这是一个可以自启动的jar包,里面包含了所有依赖jar包以及一个内置的tomcat容器。解压Apollo安装包后会看到如下文件:
Apollo服务端共需要两个数据库:ApolloPortalDB和ApolloConfigDB,我们把数据库、表的创建和样例数据都分别准备了sql文件,只需要导入数据库即可。
创建ApolloPortalDB:通过各种MySQL客户端导入sql/apolloportaldb.sql即可。
下面以MySQL原生客户端为例:
source /your_local_path/sql/apolloportaldb.sql
创建ApolloConfigDB:通过各种MySQL客户端导入sql/apolloconfigdb.sql即可。
下面以MySQL原生客户端为例:
source /your_local_path/sql/apolloconfigdb.sql
Apollo服务端需要知道如何连接到你前面创建的数据库,所以需要编辑Apollo目录中的demo.sh,修改ApolloPortalDB和ApolloConfigDB相关的数据库连接串信息:
# apollo config db info apollo_config_db_url=jdbc:mysql://172.168.16.xxx:5621/ApolloConfigDB?characterEncoding=utf8 apollo_config_db_username=用户名 apollo_config_db_password=密码 # apollo portal db info apollo_portal_db_url=jdbc:mysql://172.168.16.xxx:5621/ApolloPortalDB?characterEncoding=utf8 apollo_portal_db_username=用户名 apollo_portal_db_password=密码
快速启动脚本会在本地启动3个服务,分别使用8070, 8080, 8090端口,请确保这3个端口当前没有被使用。
lsof -i:8080
netstat -aon|findstr 8080
先切换到Apollo目录:
cd D:\StudyDocuments\technology\Apollo\apollo-build-scripts-master
然后执行启动脚本:
./demo.sh start
因为我是在本机部署Apollo服务端的,所以直接打开http://localhost:8070即可:
默认管理员用户名:apollo,密码:admin,输入即可登录成功!而Eureka默认端口是8080,即打开http://localhost:8080/即可:
阿波罗如何创建修改用户密码、创建用户、部门,分配权限等等操作,我就不说了,大伙可以自行百度或者去官网了解,这不在本文范畴之内。
Apollo默认有两个组织部门,可以通过登录后管理员工具-系统参数,输入key值organizations添加修改。返回主界面点击创建项目后,根据自身项目输入相关项目信息,我这边demo项目信息如下:
创建项目后,点击进去可能会报如下错误提示:
这种错误一般是数据库Eureka服务配置参数不正确导致的!因为我是本地部署Apollo服务端的,IIS已经存在一个站点占用了Eureka服务默认端口8080,所以停掉站点后,输入demo.sh stop-demo.sh start重新启动下Apollo即可。重新启动Apollo后可能还会提示如下信息:
因为项目缺少环境namespaces配置,点击左侧“添加Namespace”选项添加一个dev开发环境namespaces:
namespaces创建后新增AspNetCore.Apollo.Test.WebApi项目开发环境配置:
上述配置相当于Core项目appsettings.json中以下配置:
然后点击发布即可。
通过Github上https://github.com/ctripcorp/apollo.net源码可以了解到,示例AspNetCore.Apollo.Test.WebApi应用可以通过appsettings.json文件可以添加Apollo环境配置信息:
{ "apollo": { "AppId": "AspNetCore.Apollo.Test.WebApi", //"Cluster": "test",////没有集群,暂时隐藏 "MetaServer": "http://localhost:8080/", //"Secret": "ffd9d01130ee4329875ac3441c0bedda",////没有ids4接入,暂时隐藏 //"Namespaces": [ "application.xml", "application.json", "application.yml", "application.yaml", "application" ],////没有Namespace数组,暂时隐藏 "Namespace": "dev", "Env": "Dev", "Meta": { "DEV": "http://localhost:8080/" //"FAT": "http://106.54.227.205:8080/", //"UAT": "http://106.54.227.205:8080/", //"PRO": "http://106.54.227.205:8080/" ////示例暂时只有开发环境 } } }
然后在Program主程序入口引用Com.Ctrip.Framework.Apollo.Configuration Nuget包,添加Apollo环境配置信息,添加Namespace名称,具体配置代码如下:
.ConfigureAppConfiguration(builder => { var iConfigurationRoot = builder.Build(); var apolloInfo = iConfigurationRoot.GetSection("apollo"); var namespaceName = iConfigurationRoot.GetSection("apollo").GetSection("Namespace").Value; builder.AddApollo(apolloInfo).AddNamespace(namespaceName); })
然后运行示例AspNetCore.Apollo.Test.WebApi应用,会看到如下调试信息:
从上述调试信息可以看到Apollo在ASP.NET Core集成成功!