假设一个开发场景,用到三套环境dev、test和prod,把配置信息存放到Zookeeper,各个机器通过自身的hostname来获取对应的信息。下面就按照这个思路一步步来实现这样一个简单的配置中心。

将数据写入zookeeper

直接通过zkcli简单地写入几条数据,数据的分布如下:

configuration dev spring.datasource.url=jdbc:mysql://dev.didadu.cn:3306:test spring.datasource.name=dev spring.datasource.password=devPwd test spring.datasource.url=jdbc:mysql://test.didadu.cn:3306:test spring.datasource.name=test spring.datasource.password=testPwd prod spring.datasource.url=jdbc:mysql://prod.didadu.cn:3306:test spring.datasource.name=teprodst spring.datasource.password=prodPwd cd /opt/zookeeper-3.4.9 zookeeper-3.4.9 server1/bin/zkCli.sh create /configuration "" create /configuration/dev "" create /configuration/test "" create /configuration/prod "" create /configuration/dev/spring.datasource.url jdbc:mysql://dev.didadu.cn:3306:test create /configuration/dev/spring.datasource.name dev create /configuration/dev/spring.datasource.password devPwd create /configuration/test/spring.datasource.url jdbc:mysql://test.didadu.cn:3306:test create /configuration/test/spring.datasource.name test create /configuration/test/spring.datasource.password testPwd create /configuration/prod/spring.datasource.url jdbc:mysql://prod.didadu.cn:3306:test create /configuration/prod/spring.datasource.name prod create /configuration/prod/spring.datasource.password prodPwd 新建测试模块

在 zookeeper-sample 项目中新建模块configuration,没有使用SpringBoot提供的Config Server,只是简单的实现了下,核心代码如下:

@Configuration publicclassConfigurer{ @Bean publicStringzookeeperLoader()throwsException{ String hostname = InetAddress.getLocalHost().getHostName().split("\\.")[0]; CuratorFramework zkClient = CuratorFrameworkFactory.builder() .connectString("localhost:2181,localhost:2182,localhost:2183") .sessionTimeoutMs(5000) .retryPolicy(newExponentialBackoffRetry(1000,3)).build(); zkClient.start(); StringBuilder basePath = newStringBuilder("/configuration/").append(hostname).append("/"); StringBuilder urlPath = newStringBuilder(basePath).append("spring.datasource.url"); System.out.println(newString(zkClient.getData().forPath(urlPath.toString()))); StringBuilder namePath = newStringBuilder(basePath).append("spring.datasource.name"); System.out.println(newString(zkClient.getData().forPath(namePath.toString()))); StringBuilder pwdPath = newStringBuilder(basePath).append("spring.datasource.password"); System.out.println(newString(zkClient.getData().forPath(pwdPath.toString()))); zkClient.close(); return"ok"; } } 修改hostname并测试 #修改/etc/hosts,添加如下内容: 127.0.0.1 dev.didadu.cn 127.0.0.1 test.didadu.cn 127.0.0.1 prod.didadu.cn #临时修改hostname sudo hostname dev.didadu.cn 输出: jdbc:mysql://dev.didadu.cn:3306:test dev devPwd #再次修改hostname sudo hostname prod.didadu.cn 输出: jdbc:mysql://prod.didadu.cn:3306:test prod prodPwd

结果证明实现了当初假设的场景,这个只是简单示例,实际项目还得按需优化。

本文数据库(mysql)相关术语:navicat for mysql mysql workbench mysql数据库 mysql 存储过程 mysql安装图解 mysql教程 mysql 管理工具

主题: Spring数据
分页:12
转载请注明
本文标题:Zookeeper学习笔记九【Zookeeper典型使用场景之配置中心】
本站链接:http://www.codesec.net/view/485540.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 数据库(mysql) | 评论(0) | 阅读(45)