一、常见配置中心对比
- Spring Cloud Config: https://github.com/spring-cloud/spring-cloud-config
- Apollo: https://github.com/ctripcorp/apollo
- Nacos: https://github.com/alibaba/nacos
对比项目/配置中心 | spring cloud config | apollo | nacos(重点) |
---|---|---|---|
开源时间 | 2014.9 | 2016.5 | 2018.6 |
配置实时推送 | 弱支持(Spring Cloud Bus) | 支持(HTTP长轮询1s内) | 支持(HTTP长轮询1s内) |
版本管理 | 支持(Git) | 自动管理 | 自动管理 |
配置回滚 | 弱支持(Git+Bus) | 支持 | 支持 |
配置的灰度发布 | 理念上支持,可操作性不强 | 支持 | 1.1.0开始支持 |
权限管理 | 不支持(没有区分用户、角色、权限的概念) | 支持 | 1.2.0开始支持 |
多集群多环境 | 对集群概念支持较弱 | 支持 | 支持 |
多语言 | 只支持Java | Go,C++,Python,Java,.net,OpenAPI | Python,Java,Nodejs,OpenAPI |
分布式高可用最小集群数量 | Config-Server2+Git+MQ | Config2+Admin3+Portal*2+Mysql=8 | Nacos*3+MySql=4 |
配置格式校验 | 不支持 | 支持 | 支持 |
通信协议 | HTTP和AMQP | HTTP | HTTP |
数据一致性 | Git保证数据一致性,Config-Server从Git读取数据 | 数据库模拟消息队列,Apollo定时读消息 | HTTP异步通知 |
二、Apollo原理及安装
- Apollo官方文档
配置发布后实时推送到客户端的流程
- 用户在Portal操作配置发布
- Portal调用Admin Service的接口操作发布
- Admin Service发布配置后,发送ReleaseMessage给各个Config Service
- Config Service收到ReleaseMessage后,通知对应的客户端
客户端建立与服务端长链接进行通信(通过Http Long Polling实现)
Apollo安装
- 环境要求:
Java版本要求:1.8
MySQL版本要求:5.6.5+- Apollo的表结构对timestamp使用了多个default声明,所以需要5.6.5以上版本。- Apollo的表索引是大字段,低版本不满足要求- mysql版本检查命令为: SHOW VARIABLES WHERE Variable_name = 'version';
代码地址
https://gitee.com/apolloconfig/apollo.git
当前master 版本是2.2.0
目录结构
/scripts/sql里找到数据库脚本apolloconfigdb.sql,apolloportaldb.sql,新建数据库并初始化数据
修改数据库配置
/scripts/build.bat 里面修改数据库链接地址和密码
set apollo_config_db_url="jdbc:mysql://localhost:3306/ApolloConfigDB?serverTimezone=UTC&characterEncoding=utf8"
set apollo_config_db_username="root"
set apollo_config_db_password="123456"rem apollo portal db info
set apollo_portal_db_url="jdbc:mysql://localhost:3306/ApolloPortalDB?serverTimezone=UTC&characterEncoding=utf8"
set apollo_portal_db_username="root"
set apollo_portal_db_password="123456"
如果需要修改端口,可以打开目录apollo\apollo-portal\src\main\resources,修改application.yml
同理,config service和admin service如果需要修改,打开相应文件修改
编译打包
windows运行build.bat,进行打包
完成后在上面目录中找到jar包,可以拷贝到同一目录,进行启动
启动脚本示例:
@echo off
start cmd /c "java -jar apollo-configservice-2.2.0-SNAPSHOT.jar"
start cmd /c "java -jar apollo-adminservice-2.2.0-SNAPSHOT.jar"
start cmd /c "java -jar apollo-portal-2.2.0-SNAPSHOT.jar"
spause // 防止运行完毕后直接关闭界面
启动后,打开 http://localhost:8070/ 账号/密码:apollo/admin
调整ApolloPortal配置
服务配置项统一存储在ApolloPortalDB.ServerConfig表中,可以通过管理员工具 - 系统参数
页面进行配置:
三、集成SpringBoot
版本号根据具体的版本而定
<dependency><groupId>com.ctrip.framework.apollo</groupId><artifactId>apollo-client</artifactId><version>2.2.0</version></dependency>
application.properties 中配置
app.id=app1
apollo.bootstrap.enabled=true
apollo.bootstrap.eagerLoad.enabled=true
apollo.bootstrap.namespaces=application,bm1.bmname
apollo.meta=http://localhost:8080
apollo.cache-dir=D:\\var
apollo.cluster=default
主运行类
@SpringBootApplication
@EnableApolloConfig
public class BaseClientApplication { public static void main(String[] args) {SpringApplication.run(BaseClientApplication.class, args);}}
这时启动已经可以使用apollo从配置信息
使用方式
@Value("${uuid_url}")private String uuidUrl;
Apollo的配置
在apollo修改value值后,可实时同步到应用系统