服务器端:前端
因为目前本公司产品众多,而且因为业务上的需求增长,致使目前公司产品愈来愈复杂,各个业务系统的公共配置以及应用本身的配置都存储与各个属性文件管理,给运维人员带来了极大的工做量。mysql
sysware配置中心服务端,采用zookeeper用来存储公共以及各业务系统的配置属性。而且提供前端界面进行维护这些属性配置。采用mysql数据进行数据的持久化。redis
1) zookeepersql
对于系统中各配置的存储,目前规划的存储结构以下:数据库
节点说明服务器 |
描述app |
---|---|
common | 公共配置 |
p2m | p2m系统私有配置 |
ke | ke系统私有配置 |
eap | eap系统私有配置 |
edm | edm系统私有配置 |
节点说明运维 |
描述maven |
---|---|
key | 配置属性键 |
value | 配置属性值 |
建议:为了可以区分各个业务系统的配置,建议规则为使用:sysware + 点 + 业务系统名称 + 点 + 服务名称 + 点 +keyspa
例如:在P2M系统中须要配置rabbitMQ的名称,便可为:sysware.p2m.rabbitmq.username
公共的配置即将有服务端portal录入,规则为sysware.common开头的key
2) DB
服务端数据库采用的mysql数据,主要用来防止zookeeper服务出现异常等不肯定因素致使数据丢失,因此在mysql数据中也存储了一份做为备份,以备恢复数据。
3) 服务端 portal
方便运维人员进行zookeeper上数据的管理,提供了服务端portal界面操做。
4) client
提供与各个业务系统的配置中心客户端,以jar的形式提供,各业务系统能够获取配置中心数据。
3、sysware配置中心服务端使用
服务端提供了portal对于zk数据进行管理。
1) 登陆
2)首页
3)数据列表
4)新增数据
5)修改,删除
客户端:
配置中心客户端是服务于各个应用系统从而操做配置中心的配置属性。
客户端总体模型:
实现逻辑:
1) 采起数据加载到内存方式解决高效获取的问题,借助zookeeper的节点监听机制来实现实时感知。
2)新增配置,获取配置,修改配置, 删除配置逻辑图
3) 各个应用系统 获取配置过程 详细业务 逻辑图
配置中心客户端是以jar的形式提供于各个应用系统。
准备工做:
1)若是是非maven项目,须要将jar引入项目。
sysware-config.client-1.0-SNAPSHOT.jar(这边咋就限制文件大小9.77M呢,上传不上去,jar 13M,须要jar直接联系系统集成部杨晓辉)
2) 若是是maven项目,在pom中直接引入如下依赖,(目前还没上传到私服,后续完成)
<dependency>
<groupId>com.sysware</groupId>
<artifactId>sysware-config.client</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
3)须要在应用系统的classpath目录下添加config.properties文件,里面须要配置应用系统的惟一标识。
配置的key为:sysware.appid value为系统的惟一标识。
例如:sysware.appid=p2m
4)须要在在以前的sysware.properties文件中配置zk的ip
例如:sysware.zookeeper.ip=127.0.0.1:2181
使用方式:
配置中心客户端对外提供了增删改查接口,具体使用以下:
接口名称 |
返回值 |
接口描述 |
---|---|---|
接口名称 |
返回值 |
接口描述 |
String getValueByKey(String key) |
String | 获取属性:根据键key获取值value; |
void addValue(String key, String value) |
void | 新增属性:key为配置的键,value为配置的值 |
void updateValueByKey(String key, String value) |
void | 修改属性:key为配置的键,value为配置的值 |
void deleteValueByKey(String key) |
void | 删除属性:key为配置的键 |
具体使用demo:
/*
* 从配置中心客户端获取属性信息
* 1.若是从配置中心获取属性不为空,则使用配置中心配置属性。
* 2.若是配置中心中获取不到属性,则使用应用系统配置的属性,而且须要将应用系统该属性配置项推送至配置中心
*/
SyswareConfigClient scc = SyswareConfigClient.newInstance();
//获取DRIVER_CLASS_NAME
//方法说明:获取属性value
String driverClassName = scc.getValueByKey(DBConfig.DRIVER_CLASS_NAME);
if(!SyswareUtil.isEmpty(driverClassName)){
props.setProperty(DBConfig.DRIVER_CLASS_NAME, driverClassName);
}else{
//方法说明:addValue("sysId","属性key","属性value")
scc.addValue(DBConfig.DRIVER_CLASS_NAME, props.getProperty(DBConfig.DRIVER_CLASS_NAME));
}
建议:为了可以区分各个业务系统的配置,各个业务系统本身配置的属性文件中,建议规则为使用:sysware + 点 + 业务系统名称 + 点 + 服务名称 + 点 +key
例如:在P2M系统中须要配置rabbitMQ的名称,便可为:sysware.p2m.rabbitmq.username
公共的配置即将有服务端portal录入,规则为sysware.common开头的key, 例如:sysware.common.redis.ip