php微服务配置中心,Zookeeper实现微服务统一配置中心

@Configuration

public class ZkConfig {

@Value("${config.zookeeper.url}")

String zkUrl;   // 配置文件读取zk的地址

@Value("${config.zookeeper.nodename}")

String nodename;  // 配置所在的节点名

private Properties properties = new Properties();

public String getProperty(String key) {

String value = properties.getProperty(key);

if (StringUtils.isEmpty(value)) {

throw new RuntimeException("配置信息不存在");

}

return value;

}

@PostConstruct

public void init() {

CuratorFramework zkclient = CuratorFrameworkFactory.newClient(zkUrl,

new RetryOneTime(1000));

zkclient.start();// 启动Zookeeper的连接

try {

// 1. 读取zookeeper数据

HashMap configMap = new HashMap<>();

List configKeys = zkclient.getChildren().forPath("/" + nodename);

for (String configKey : configKeys) {

byte[] data = zkclient.getData().forPath("/" + nodename + "/" + configKey);

configMap.put(configKey, new String(data));

}

// 2. 把数据存储到 properties中

properties.putAll(configMap);

// 3. 配置发生修改  -->  watch监听机制

TreeCache treeCache = new TreeCache(zkclient, "/" + nodename);

treeCache.start(); // 监听整个节点内的数据变化

treeCache.getListenable().addListener(new TreeCacheListener() {

@Override

public void childEvent(CuratorFramework curatorFramework,

TreeCacheEvent treeCacheEvent) throws Exception {

// 如果zk中有数据变化,执行相应的代码

switch (treeCacheEvent.getType()) {

case NODE_UPDATED:

System.out.println("数据发生了变化: "+treeCacheEvent.getData());

String key = treeCacheEvent.getData().getPath().replace("/"+nodename+"/","");

String value = new String(treeCacheEvent.getData().getData());

properties.setProperty(key, value);

break;

default:

break;// 其他情况不做处理

}

});

} catch (Exception e) {

e.printStackTrace();

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值