SpringCloud Zookeeper Config的使用(附zkui)

前提介绍

之前我的项目使用了zookeeper作为注册中心,那么来了那配置中心用什么呢?因为配置中心的选型也有很多,consul、config、zookeeper等等。那么使用排除法consul要额外部署一台consul服务为了config配置浪费…config要结合git使用,但是我们代码用的管理是svn所有和git相关的也不考虑…那么之前用到的zookeeper就成了不二的选择。为啥不是第一个就用zookeeper?因为官方没有像consul一样提供UI界面去方便管理,直到我找到了zkui以后。那么到现在在资源有限的情况下,从一开始要用kafka必须要有zookeeper到注册中心用zookeeper到配置中心用zookeeper,功能强大的zookeeper已经帮我们节省了很多资源,只要一套zookeeper集群就解决。

如果使用

简单的使用可以通过阅读官方文档即可。第7章的内容。

解决部分大致介绍了config的情况,并描述了application结合profile来指定它的作用范围。并且告诉我们在zookeeper里面改动后是可以通知到实例的。

下面开始使用第一步引入依赖,如果前面用了spring-cloud-starter-zookeeper-all
就不需要重复引入。

<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-zookeeper-config</artifactId>
</dependency>

接下来配置文件里面配置属性

是否开启配置中心,默认是开启,我这里是一开始测试的时候用本地配置关
spring.cloud.zookeeper.config.enabled=true
在zookeeper保存的根目录
spring.cloud.zookeeper.config.root=/config
在zookeeper上保存的目录
spring.cloud.zookeeper.config.defaultContext=${spring.application.name}
目录名分割方式例如 testApp,dev或testApp-prod
spring.cloud.zookeeper.config.profile-separator=-
远程配置更新后是否要理解通知实例更新默认开启,没用到就关闭了
spring.cloud.zookeeper.config.watcher.enabled=false

对就是这么简单。但是现在问题来了如果把application的配置导入到zookeeper上面?consul自带ui界面。所以我在网上搜索,终于找到了一个开源的zkui,是github里面的。https://github.com/DeemOpen/zkui
主页有讲如何使用很简单这里我讲一下配置文件如何导入
首先要写一份appliaction.txt,里面属性的格式如下

/config/testApp-prod=logging.config=classpath:logback-spring.xml
/config对应spring.cloud.zookeeper.config.root
testApp对应spring.cloud.zookeeper.config.defaultContext
-对应spring.cloud.zookeeper.config.profile-separator
logging.config=classpath:logback-spring.xml就是appliaction里面的key:value

准备好后在页面import导入即可。
SpringCloud Zookeeper Config的使用(附zkui)_第1张图片

如果你的zookeeper使用了acl,其实也应该用acl。但是里面有实现defaultAcl但是这个并不是很好用。所以需要在源码里面加入zookeeper.addAuthInfo

//ZooKeeperUtil.class
    /**
     * addAuthInfo
     * @param zooKeeper    zk client connect
     * @param jsonAuthInfo 认证信息
     */
    public void addAuthInfo(ZooKeeper zooKeeper, String jsonAuthInfo) {
        if (jsonAuthInfo == null || jsonAuthInfo.trim().length() == 0) {
            return;
        } else {
            try {
                com.alibaba.fastjson.JSONObject authInfo = JSON.parseObject(jsonAuthInfo);
                String scheme = authInfo.getString("scheme");
                String auth = authInfo.getString("auth");
                if (auth == null || auth.trim().length() == 0) {
                    throw new RuntimeException();
                }
                zooKeeper.addAuthInfo(scheme, auth.getBytes());
            } catch (Exception e) {
                throw new RuntimeException("Unable to parse auth info " + jsonAuthInfo, e);
            }
        }
    }
   //ServletUtil.class
    public ZooKeeper getZookeeper(HttpServletRequest request, HttpServletResponse response, String zkServer, Properties globalProps) {
        try {

            HttpSession session = request.getSession();
            ZooKeeper zk = (ZooKeeper) session.getAttribute("zk");
            if (zk == null || zk.getState() != ZooKeeper.States.CONNECTED) {
                Integer zkSessionTimeout = Integer.parseInt(globalProps.getProperty("zkSessionTimeout"));
                //Converting seconds to ms.
                zkSessionTimeout = zkSessionTimeout * 1000;
                zk = ZooKeeperUtil.INSTANCE.createZKConnection(zkServer, zkSessionTimeout);
                //添加authInfo
                ZooKeeperUtil.INSTANCE.addAuthInfo(zk,globalProps.getProperty("authInfo"));
                ZooKeeperUtil.INSTANCE.setDefaultAcl(globalProps.getProperty("defaultAcl"));
                if (zk.getState() != ZooKeeper.States.CONNECTED) {
                    session.setAttribute("zk", null);
                } else {
                    session.setAttribute("zk", zk);
                }

            }
            return zk;
        } catch (IOException | InterruptedException ex) {
            logger.error(Arrays.toString(ex.getStackTrace()));
        }
        return null;
    }
config.cfg

If you use acl,please use super account’s username and password to login.
authInfo={“scheme”:“digest”,“auth”:“super:xxx”}

这样就可以像consul ui一样轻松的把在config里面导入配置文件。

其他相关文章

SpringCloud Zookeeper 如何添加权限后客户端如何访问
SpringCloud Zookeeper dependencies关系资源上具体实例上下线

你可能感兴趣的:(SpringCloud,Zookeeper)