一、Apollo简介
1.1 主流配置中心
- Disconf
2014年百度开源的配置中心,目前已不再维护
- Spring Cloud Config
2014年9月开源,是SpringCloud生态中的一员
- Apollo
2016年携程开源的配置管理中心,能够集中化管理不同环境、不同集群的配置,配置修改后能实时推送到应用端,并且具备权限管理的特性
- Nacos
2018年阿里开源,还可以做DNS和RPC的服务发现.
1.2 简介
Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中化管理应用不同环境、不同集群的配置,配置修改后能够实时推送到应用端,并且具备规范的权限、流程治理等特性,适用于微服务配置管理场景。
服务端基于Spring Boot和Spring Cloud开发,打包后可以直接运行,不需要额外安装Tomcat等应用容器。
Java客户端不依赖任何框架,能够运行于所有Java运行时环境,同时对Spring/Spring Boot环境也有较好的支持。
二、快速入门
- 执行sql脚本
通过百度网盘下载,
提取码: 9wwe
2. 修改demo.sh
修改里面的数据库连接配置
仅修改如下部分即可.
apollo_config_db_url=jdbc:mysql://localhost:3306/ApolloConfigDB?characterEncoding=utf8
apollo_config_db_username=用户名
apollo_config_db_password=密码(如果没有密码,留空即可)
# apollo portal db info
apollo_portal_db_url=jdbc:mysql://localhost:3306/ApolloPortalDB?characterEncoding=utf8
apollo_portal_db_username=用户名
apollo_portal_db_password=密码(如果没有密码,留空即可)
- 运行
./demo.sh start
我的电脑启动慢,所以我修改了demo.sh的等待时间将下面的24改成了60
如下:
function checkServerAlive {
declare -i counter=0
declare -i max_counter=24 # 24*5=120s
declare -i total_time=0
- 启动成功后访问http://localhost:8070
上面框住的是三个重要参数.环境、appid、namespace
新增配置操作:
先点击新增配置,然后发布即可.
- 编写客户端
新建一个项目,引入依赖
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.28</version>
</dependency>
编写代码:
public class ConfigTest {
public static void main(String[] args) {
Config appConfig = ConfigService.getAppConfig();
String property = appConfig.getProperty("test", null);
System.out.println("获取到值:"+property);
}
}
运行时vm参数:
-Dapp.id=SampleApp -Denv=DEV -Ddev_meta=http://localhost:8080
集群的指定
-Dapollo.cluster=shanghai
三、核心概念
3.1 application(应用)
实际使用配置的应用
3.2 environment(环境)
应用里面包含多个环境
3.3 cluster(集群)
一个应用一个环境可能有多个集群.比如test应用的生产环境有北京集群和上海集群,那么他不同集群的配置也会不一样.
3.4 namespace(命名空间)
用于做一个分组的概念
四、常用操作
4.1 添加部门
管理员工具-》系统参数-》在key的输入框输入organizations,然后点击查询-》修改value值
后略
五、SpringBoot整合Apollo
5.1 引入依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.7.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.mmc</groupId>
<artifactId>apollo-quickstart</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
<version>1.1.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
</dependencies>
</project>
5.2 配置文件
application.properties
app.id=account-service
apollo.bootstrap.enabled=true
#多个以逗号分隔
apollo.bootstrap.namespaces=application
apollo-env.properties
dev.meta=http://localhost:8080
5.3 启用Apollo注解
@SpringBootApplication
@EnableApolloConfig
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class);
}
}
5.4 启动时增加VM指令
-Denv=DEV -Dapollo.cacheDir=/opt/dir -Dapollo.cluster=DEFAULT
5.5 测试
@RestController
public class TestController {
@Value("${myname}")
private String myname;
@RequestMapping("/test")
public String test(){
return myname;
}
}
另外像spring的基本配置,如server.port,当我们在apollo里面配置了这个key值,那么启动项目时配置会直接生效.