基于zookeeper的统一配置中心实现
由agent和console组成
agent:作为基础jar包,被接入程序使用
console:后台运营、管理、配置的地方
##如何使用统一配置呢?
1、Annotaion 这无疑是最简洁、优雅的方式
2、控制台配置
3、java原生
主要通过三种方式:这三种都需要添加相关的mvn依赖(jar包), 然后就可以在你的项目使用Annotation了
1、spring接入
2、修改启动脚本
3、在控制台配置相关信息
添加mvn依赖:
<dependency>
<groupId>com.bitium10.ucc</groupId>
<artifactId>ucc-spring</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
配置xml方式:
<!--annotation扫描-->
<context:component-scan base-package="com.bitium10.ucc.spring.usage" />
<context:annotation-config/>
<!--声明支持扩展的annotation配置-->
<bean class="com.bitium10.ucc.spring.ConfigAnnotationBeanPostProcessor">
<constructor-arg index="0" value="${zk.servers}"/>
<constructor-arg index="1" value="${zk.forceWhenNull}"/>
</bean>
spring接入实例
@Service("kw")
@ZkTypeConfigurable(useOwnServer = false,path = "/conf/test/demo")
public class KeyWord implements Config {
@ZkExtendConfigurable(path = "keyWords",update = true,tempKey = "key_words",dataStroe = CacheDataStore.class)
public static Map<String,String> config = new HashMap<String, String>(0);
@Override
public void print() {
System.out.println(config);
}
}
提供三种接入方式
控制台配置方案,客户端自动加载。
通过agent的方式:
1、配置注解:
@ZkTypeConfigurable(servers = "localhost:2181",useOwnServer = true,path = "/conf/test/demo")
public class Requirements {
@ZkFieldConfigurable(path = "name",update = true)
public static String name = "default_name";
@ZkFieldConfigurable(path = "cpu",update = true,resolver = CpuResolver.class)
public static Cpu cpu = new Cpu("default","default","default");
}
2、修改jvm启动参数加上:
-javaagent:cuc-agent-1.0-SNAPSHOT.jar
除以上的启动但是外,还支持一下两种agent方式:
1、启动参数
-javaagent:agent.jar=zk@localhost:2181#[email protected]
2、jvm环境变量
-javaagent:agent.jar -DZK=localhost:2181 -DCLASS=c1,c2,c3
1、定义扩展配置存储方案
实现ExtendDataStore接口即可。例如:
public class CacheDataStore implements ExtendDataStore<Map<String,String>> {
public final static Map<String,Map<String,String>> _CACHE = new HashMap<String, Map<String,String>>(10);
static {
//init value
Map<String,String> map = new HashMap<String, String>(4);
map.put("d1","d1");
map.put("d2","d2");
map.put("d3","d3");
map.put("d4","d4");
_CACHE.put("key_words",map);
Map<String,String> map1 = new HashMap<String, String>(4);
map1.put("a1","a1");
map1.put("a2","a2");
map1.put("a3","a3");
map1.put("a4","a4");
_CACHE.put("key_words1",map1);
Map<String,String> map2= new HashMap<String, String>(4);
map2.put("咚咚1","咚咚1");
map2.put("咚咚2","咚咚2");
map2.put("咚咚3","咚咚3");
map2.put("咚咚4","咚咚4");
_CACHE.put("key_words2",map2);
}
@Override
public void setValue(String key, Map<String, String> map) {
_CACHE.put(key,map);
}
@Override
public Map<String, String> getValue(String key) {
return _CACHE.get(key);
}
}
说明:Map<String,String>为扩展配置字段的类型
2、对扩展配置的字段注解
@ZkTypeConfigurable(useOwnServer = false,path = "/conf/test/demo")
public class KeyWord {
@ZkExtendConfigurable(path = "keyWords",update = true,tempKey = "key_words",dataStroe = CacheDataStore.class)
public static Map<String,String> config = new HashMap<String, String>(0);
}
1、更新,删除节点
2、创建新节点
TODO
一、配置管理
1、配置管理console部分的开发
2、配置管理的agent部分开发
二、使用doc完善
三、流程管理,项目管理
四、细节调优
五、异常方案
六、性能测试