https://gitee.com/xuhx615/apollo-demo.git
Disconf
百度开源的配置管理中心Spring Cloud Config
Apollo
携程开源Nacos
Config Service
:提供配置的读取、推送等功能,服务对象是Apollo
客户端Admin Service
:提供配置的修改、发布等功能,服务对象是Apollo Portal
(管理界面)Config Service
和Admin Service
都是多实例、无状态部署,所以需要将自己注册到Eureka
中并保持心跳Eureka
之上我们架了一层Meta Server
用于封装Eureka
的服务发现接口Client
通过域名访问Meta Server
获取Config Service
服务列表(IP+Port
),而后直接通过IP+Port
访问服务,同时在Client
侧会做load balance
、错误重试Portal
通过域名访问Meta Server
获取Admin Service
服务列表(IP+Port
),而后直接通过IP+Port
访问服务,同时在Portal
侧会做load balance
、错误重试Config Service
、Eureka
和Meta Server
三个逻辑角色部署在同一个JVM
进程中Apollo
提供了一个统一界面集中式管理不同环境(environment
)、不同集群(cluster
)、不同命名空间(namespace
)的配置。zk
的地址等namespace
)可以很方便的支持多个不同应用共享同一份配置,同时还允许应用对共享的配置进行覆盖English
)Apollo
修改完配置并发布后,客户端能实时(1秒)接收到最新的配置,并通知到应用程序。java
和.net
原生客户端API
https://www.apolloconfig.com/#/zh/README
Java 1.8+
MySQL 5.6.5+
apollo-quick-start-2.1.0.zip
,解压/sql
下面的sql
到数据库demo.sh
脚本里面的mysql
配置Quick Start
脚本会在本地启动3个服务,分别使用8070, 8080, 8090
端口,请确保这3个端口当前没有被使用
8070 Portal
管理控制台8080 Meta Server,Eureka,Config Service
8090 Admin Service
./demo.sh start
8070 apollo/admin
http://192.168.113.102:8070/
./demo.sh stop
application
应用environment
环境cluster
集群namespace
命名空间⭐依赖添加
<dependency>
<groupId>com.ctrip.framework.apollogroupId>
<artifactId>apollo-clientartifactId>
<version>1.1.0version>
dependency>
⭐vm
启动参数
-Dapp.id=ApolloDemo -Denv=DEV -Dapollo.cluster=beijing -Ddev_meta=http://192.168.113.102:8080
app.id:应用ID
env:环境
apollo.cluster:集群(不指定,默认读取default集群配置)
dev_meta:apollo-config地址
⭐配置读取
/**
* 读取默认namespace=application下面的配置信息
*/
@Test
public void readDefaultNameSpaceConfig() {
Config config = ConfigService.getAppConfig();
//param1:configKey param2:defaultValue
String val = config.getProperty("doc.test", "");
System.out.println(val);
}
/**
* 读取指定namespace下面的配置信息
*/
@Test
public void readAppointNameSpaceConfig() {
Config config = ConfigService.getConfig("dba");
String val = config.getProperty("spring.datasource.name", "");
System.out.println(val);
}
/**
* 读取指定公共namespace下面的配置信息
*/
@Test
public void readPublicNameSpaceConfig() {
Config config = ConfigService.getConfig("XUHAIXIANG.common");
String val = config.getProperty("name", "");
System.out.println(val);
}
/**
* 读取指定集群下面的配置信息
* -Dapollo.cluster=beijing
*/
@Test
public void readAppointClusterConfig() {
Config config = ConfigService.getConfig("dba");
String val = config.getProperty("spring.datasource.name", "");
System.out.println(val);
}
⭐整合SpringBoot
#集成apollo
#应用ID
app.id = ApolloDemo
#允许接入apollo
apollo.bootstrap.enabled = true
#名称空间
apollo.bootstrap.namespaces = application,dba,XUHAIXIANG.common
#config
apollo.meta = http://192.168.113.102:8080
#集群
apollo.cluster = beijing
#环境
env = DEV
#apollo缓存路径
apollo.cacheDir = classpath:/apollo/cache/DEV
#Spring配置自动更新
apollo.autoUpdateInjectedSpringProperties=true
import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* SpringBoot启动器
*/
@SpringBootApplication
@EnableApolloConfig //允许使用Apollo配置
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Portal
操作配置发布Portal
调用Admin Service
的接口操作发布Admin Service
发布配置后,发送ReleaseMessage
给各个Config Service
Config Service
收到ReleaseMessage
后,通知对应的客户端