Apollo+springboot 集成学习
目录
前言
该文章主要对Apollo进行简单的入门介绍,对配置信息进行讲解操作,实战Springboot集成Apollo,读取配置信息过程。
一、Apollo是什么?
2016年5月,携程开源的配置管理中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后可以实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理的场景。Apollo的功能主要用于配置应用软件的参数、各种功能的开关、服务器地址、数据库地址,支持灰度发布、热度发布。
1.什么是配置?
配置是应用程序启动和运行需要读取的信息,配置伴随着应用程序的整个生命周期,配置是独立于程序的只读变量,
2.Apollo主要基于四个维度的参数配置
application (应用) :就是一个项目,订单服务,用户服务,都是一个项目 一个应用,
environment (环境) :由于开发和测试的迭代进行,会衍生出不同的环境,程序员在不同的环境上进行开发和部署,不同的环境配置会有所不同
cluster (集群) :一套服务在不同的地方,可能部署不同的地址,例如上海 北京集群
namespace (命名空间) :可以对配置进行分门别类的管理,就衍生出了命名空间,命名空间可以关联,可以有私有 也可以为公有。
3.Apollo构成?
主要包括服务端和客户端
4. Apollo 的执行流程
管理员 —在 Apollo配置中心 (服务端)发布配置----配置中心服务器---- 配置更新推送到 Apollo客户端 —应用程序获取配置 更新通知
另外,为了防止网络中断导致数据不一致问题,客户端也会在本地缓存配置参数
二、Apollo 安装
1.下载 apollo-quick-start.zip 可以联系我,我发您,也可以网上查找;
2.下载后解压缩就可以了,不用安装
3.配置 ApolloPortalD ApolloConfigDB 数据库信息 ,压缩包中的sql 文件夹是相关库的sql语句 ,在数据库中运行即可
4.打开MYSQL 将两个sql 拖拽进去 执行即可,执行后看到两个库信息
5.回到文件夹下 ,使用记事本打开 demo.sh ,配置数据库信息,修改数据库用户名和密码 ,以及两个库的大小写问题,其他不用动,修改之后 保存 关闭。
6. 之后回到文件夹中,右键选择GIT bash here ,输入命令 ./demo.sh start ,运行后 localhost:8070就是apollo的地址。
7.启动apollo所需的3个服务apollo-configservice、apollo-adminservice、apollo-portal,http://localhost:8080/是注册中心的地址,http://localhost:8080/ 是 apollo-adminservice,我们这里主要将的是8070端口的服务,apollo服务器端的。
三、 Apollo 项目简单配置 与 Springboot 集成
1.首次访问 Apollo http://localhost:8070
用户名:apollo
密码:admin
进入之后是空项目的,因为我之前建立的,所以有项目,可以忽略。
2.管理项目 创建部门 系统参数中 在key 中搜索organizations,安装相应的格式 添加 微服务部门 用户管理部门 ,名字随意,自己起名就好
3. 创建项目 选择相应的部门 项目ID 很重要是apollo客户端 查找配置的索引一定要记了 ,其中应用负责人,是可以定义角色的,但是apollo属于超级管理员,可以看到所有的项目,当然如果你选择其他的角色,相应的角色进入apollo中,就只能看到自己的服务
4.可以自定义应用负责人 ,也是可以自己定义的,大家可以自己拓展训练,定义,然后再根据用户民登录,这里我还是用的超级管理员
5.进入day01项目 就可以添加配置 信息了,添加相应的信息,之后进行发布,这样之后我们的配置信息就发布了,接下来就使用客户端进行读取应用配置,推送给应用程序,应用程序进行使用。
6.创建MAVEN项目, 新建maven项目 添加apollo客户端 ,客户端拿到配置,程序读取配置
7.配置pom 文件 ,apollo客户端配置
<dependencies>
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.36</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
8.测试获取配置信息,在main 中创建包,并创建测试类,程序不断的读配置类 ,当修改后会立马更新,
package com.lili.apollo;
import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.ConfigService;
public class apolloTest {
public static void main(String[] args) {
Config appConfig = ConfigService.getAppConfig();
while (true)
{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
String value=appConfig.getProperty("canido",null);
System.out.println("canido:" +value);
}
}
}
9.设置运行变量,点击运行,然后立马关闭,因为没有配置参数,也会失败的,配置变量 -Dapp.id=day01 -Denv=DEV -Ddev_meta=http://localhost:8080 ,这里的id很重要
10.之后运行程序 ,会读到配置信息,如果同步修改配置,也会实时更新的。
四 、Apollo 空间配置与Springboot的集成
1.项目的配置信息可以通过空间进行类别管理。
2.创建空间,空间可以分为公有和私有,私有就是只能自己的项目用,如果公有的,其他的项目也可以通过关联得到
3.建立成功后,会在项目中看到以空间命名的配置,添加相应的配置信息,进行分类管理,添加配置信息,并发布
4.在简单的配置读取Springboot 的基础上,读取namespace空间中的配置,步骤一样,就是使用的方法不一样。指定空间名称,之后读取配置,项目id不变
public class apolloTest {
public static void main(String[] args) {
Config config = ConfigService.getConfig("day01-namespace01");
while (true)
{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
String value=config.getProperty("namespace01.canido",null);
System.out.println("namespace01.canido:" +value);
}
}
五、创建新环境
apollo.portal.envs
总结
Apollo 配置中心,总的来说思想很简单,就是读取一个只读变量,我们在这里只是简单的运用,道理都是一样,结合到项目中后,繁多复杂的配置会管理的比较井井有条。