栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

zookeeper应用场景一:实现配置中心动态更新配置

zookeeper应用场景一:实现配置中心动态更新配置

思路:

我们在开发的时候,有时候需要获取一些公共的配置,比如数据库连接信息等,并且偶然可能需要更新配置。如果我们的服务器有N多台的话,那修改起来会特别的麻烦,并且还需要重新启动。这里Zookeeper就可以很方便的实现类似的功能。

步骤

1.将公共的配置存放在Zookeeper的节点中

2应用程序可以连接到Zookeeper中并对Zookeeper中配置节点进行读取或者修改(对于写操作可以进行权限验证设置),下面是具体的流程图:

1.引入pom 文件

        
            org.apache.zookeeper
            zookeeper
            3.4.8
        
        
            org.apache.curator
            curator-framework
            4.0.0
        
        
            org.apache.curator
            curator-recipes
            4.0.0
        

2.实际代码

package com.vince.xq.kafka;

import org.apache.curator.framework.Curatorframework;
import org.apache.curator.framework.CuratorframeworkFactory;
import org.apache.curator.retry.ExponentialBackoffRetry;
import org.apache.zookeeper.WatchedEvent;
import org.apache.zookeeper.Watcher;
import org.apache.zookeeper.data.Stat;

public class WatcherDemo implements Watcher {


    @Override
    public void process(WatchedEvent event) {
        System.out.println("eventType:" + event.getType());
        if (event.getType() == Event.EventType.NodeDataChanged) {
            System.out.println(event.getPath());

            Curatorframework curatorframework = CuratorframeworkFactory.
                    builder().connectString("127.0.0.1:2181").
                    sessionTimeoutMs(4000).retryPolicy(new
                    ExponentialBackoffRetry(1000, 3)).
                    namespace("").build();
            curatorframework.start();
            Stat stat = new Stat();
            //查询节点数据
            byte[] bytes = new byte[0];
            try {
                bytes = curatorframework.getData().storingStatIn(stat).forPath("/watcher");
            } catch (Exception e) {
                e.printStackTrace();
            }
            System.out.println(new String(bytes));
            curatorframework.close();


        }
    }

}
package com.vince.xq.kafka;

import org.apache.zookeeper.CreateMode;
import org.apache.zookeeper.KeeperException;
import org.apache.zookeeper.ZooDefs;
import org.apache.zookeeper.ZooKeeper;

import java.io.IOException;

public class ZkTest {
    static ZooKeeper zooKeeper;

    static {
        try {
            zooKeeper = new ZooKeeper("127.0.0.1:2181", 4000, new WatcherDemo());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) throws KeeperException, InterruptedException {
        String path = "/watcher";
        if (zooKeeper.exists(path, false) == null) {
            zooKeeper.create("/watcher", "0".getBytes(), ZooDefs.Ids.OPEN_ACL_UNSAFE, CreateMode.PERSISTENT);
        }
        Thread.sleep(1000);
        System.out.println("-----------");
        while (true) {
            //true表示使用zookeeper实例中配置的watcher
            zooKeeper.exists(path, true);
        }
    }
}

3.spring boot 集成 zk 实现配置中心

源码参考:

zhugezifang/zkconfig-springboot (github.com)

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/335309.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号