对比项目/配置中心 |
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异步通知 |
配置发布后实时推送到客户端的流程
客户端建立与服务端长链接进行通信(通过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表中,可以通过管理员工具 - 系统参数
页面进行配置:
版本号根据具体的版本而定
com.ctrip.framework.apollo
apollo-client
2.2.0
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的配置