Zookeeper实现微服务统一配置中心
为什么要使用配置中心我们在项目中通常使用配置文件配置如数据库连接,超时时间,回调地址等,如果项目里都统一放在properties文件里面,一旦我们要修改配置,那么一台服务器还好,如果有10台机器或者更多,逐一修改显的有点麻烦,当然我们有更好的解决办法,那就是使用配置中心统一配置,各个节点启动时候去配置中心拉去配置,如果要修改,各个节点也可以做到实时更新。ZookeeperZooKeeper由雅虎研
为什么要使用配置中心
我们在项目中通常使用配置文件配置如数据库连接,超时时间,回调地址等,如果项目里都统一放在properties文件里面,一旦我们要修改配置,那么一台服务器还好,如果有10台机器或者更多,逐一修改显的有点麻烦,当然我们有更好的解决办法,那就是使用配置中心统一配置,各个节点启动时候去配置中心拉去配置,如果要修改,各个节点也可以做到实时更新。
Zookeeper
ZooKeeper由雅虎研究院开发,是Google Chubby的开源实现,后来托管到Apache,ZooKeeper是一个经典的分布式数据一致性解决方案,致力于为分布式应用提供一个高性能、高可用,且具有严格顺序访问控制能力的分布式协调服务。
分布式应用程序可以基于ZooKeeper实现数据发布与订阅、负载均衡、命名服务、分布式协调与通知、集群管理、配置管理,Leader选举、分布式锁、分布式队列等功能。
ZKUI
Zookeeper的安装就不说了,另外Zookeeper安装之后,推荐安装ZKUI,他是一个Zookeeper的可视化管理平台,可完成CRUD操作。地址:https://github.com/DeemOpen/zkui。
大概分为三步:
- 通过
git clone https://github.com/DeemOpen/zkui.git
将他下载下来. - 之后在根目录执行
mvn package
打包. - 执行
java -jar zkui-2.0-SNAPSHOT-jar-with-dependencies.jar
运行 - 在浏览器输入http://localhost:9090/
- 默认的账号和密码是admin、manager
(启动Zookeeper好在自动zkui。)
代码实例
首先在zookeeper中创建数据配置,可以使用ZKUI创建,也可以使用命令创建。
create /order
create /order/application
create /order/application/order.notifUrl http://www.xxx.com
上面的application可不是随便取的,在后面会说。
- 加入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zookeeper-config</artifactId>
</dependency>
- 配置信息
不能在application.properties下写配置,要新建bootstrap.properties下写。bootstrap文件的启动优先级高于application文件。
#ip地址和端口
spring.cloud.zookeeper.connect-string =localhost:2181
# root
spring.cloud.zookeeper.config.root = order
@Configuration
@ConfigurationProperties(prefix = "order")
public class ZkConfig {
private String notifUrl;
public String getNotifUrl() {
return notifUrl;
}
public void setNotifUrl(String notifUrl) {
this.notifUrl = notifUrl;
}
}
测试控制器。
@RestController()
@RequestMapping("zk")
public class ZkTestController {
@Autowired
private ZkConfig zkConfig;
@GetMapping("/getNotifUrl")
public String getUser(){
return zkConfig.getNotifUrl();
}
}
之后可以在浏览器或者Postman中测试,返回的结果正是Zookeeper中的数据。
修改数据后重新测试,结果也是我们想要的。
关于上面为什么我们要写application呢?其实这个是项目名,如果没有指定,则默认是application,最终在Zookeeper中找的节点就是/order/application。
由于我们通过ConfigurationProperties注解指定了前缀。所以系统会找/order/application下order.xxx和我们所写的字段进行匹配。
另外这个值是可以更改的,也就是spring.application.name=order
,修改后重新启动,控制台会输出如下日志,这个信息告诉我们,有两个源,如果在/order/order下没有,则去/order/application下找。
我们创建/order/order节点,并设置数据,看看他会使用哪个数据?,我们原来的数据不动
运行后测试发现使用/order/order下的数据。如果这个节点不存在,则去/order/application下找。
另外spring.profiles.active
值也会影响,这个可以配合spring.cloud.zookeeper.config.profileSeparator
使用。
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)