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

为什么要使用配置中心

我们在项目中通常使用配置文件配置如数据库连接,超时时间,回调地址等,如果项目里都统一放在properties文件里面,一旦我们要修改配置,那么一台服务器还好,如果有10台机器或者更多,逐一修改显的有点麻烦,当然我们有更好的解决办法,那就是使用配置中心统一配置,各个节点启动时候去配置中心拉去配置,如果要修改,各个节点也可以做到实时更新。
在这里插入图片描述

Zookeeper

ZooKeeper由雅虎研究院开发,是Google Chubby的开源实现,后来托管到Apache,ZooKeeper是一个经典的分布式数据一致性解决方案,致力于为分布式应用提供一个高性能、高可用,且具有严格顺序访问控制能力的分布式协调服务。
分布式应用程序可以基于ZooKeeper实现数据发布与订阅、负载均衡、命名服务、分布式协调与通知、集群管理、配置管理,Leader选举、分布式锁、分布式队列等功能。

ZKUI

Zookeeper的安装就不说了,另外Zookeeper安装之后,推荐安装ZKUI,他是一个Zookeeper的可视化管理平台,可完成CRUD操作。地址:https://github.com/DeemOpen/zkui。
大概分为三步:

  1. 通过git clone https://github.com/DeemOpen/zkui.git将他下载下来.
  2. 之后在根目录执行mvn package打包.
  3. 执行java -jar zkui-2.0-SNAPSHOT-jar-with-dependencies.jar运行
  4. 在浏览器输入http://localhost:9090/
  5. 默认的账号和密码是admin、manager

(启动Zookeeper好在自动zkui。)
在这里插入图片描述

代码实例

首先在zookeeper中创建数据配置,可以使用ZKUI创建,也可以使用命令创建。

create /order
create /order/application
create /order/application/order.notifUrl http://www.xxx.com

在这里插入图片描述
上面的application可不是随便取的,在后面会说。

  1. 加入依赖
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zookeeper-config</artifactId>
</dependency>
  1. 配置信息
    不能在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使用。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值