华丽的跌落,胜过无谓的徘徊

zookeeper作为一个分布式协调框架,其中的( Node结点+Watch机制 )的特性注定了它可以随意扩展新功能,是一款优秀的分布式协调组件。

zookeeper最常用的就是作为微服务开发的注册中心,实现分布式锁,leader选举等功能。在实际的额开发中,测试到zookeeper作为配置中心也是不错的选择。

本次测试使用的SpringCloud版本是2020版本,从命名上,Spring Cloud 废除了这种英国伦敦地铁站的命名方式,从而使用了全新的 “日历化” 版本命名方式,在功能实现和更新上也是有很大的突破。

准备工作:

zkui 作为zookeeper可视化操作界面,实现动态配置远程修改操作。

在下载的zkui资源中,有关于zkui配置的文件config.cfg

zookeeper集群可视化 zookeeper可视化界面_zookeeper


有2个重要的配置需要修改

//可视化界面访问端口
serverPort=9090
//zookeeper地址
zkServer=127.0.0.1:2181
//可视化界面登录的用户名和密码
userSet = {"users": [{ "username":"admin" , "password":"admin","role": "ADMIN" },{ "username":"appconfig" , "password":"appconfig","role": "USER" }]}

修改好后需要把修改的config.cfg文件重新打入jar包中

jar uvf zkui.jar config.cfg

启动zkui

java -jar zkui.jar

zookeeper集群可视化 zookeeper可视化界面_spring boot_02

需要的 pom 文件如下:

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    //springCloud2020.0.0-SNAPSHOT版本支持的Springboot版本是2.4.1以上
    <version>2.4.1</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>2020.0.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>
<!--#解决bootstrap.properties配置文件在cloud2020版本中失效问题-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<!--actuator监控-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zookeeper-config</artifactId>
</dependency>

bootstrap.properties配置文件

#服务名
spring.application.name=config-demo
#ZooKeeper的连接字符串,如果是集群,逗号分隔节点,格式:ip:port[,ip2:port2,.....]
spring.cloud.zookeeper.connect-string=127.0.0.1:2181
#指定zookeeper目录的根目录
spring.cloud.zookeeper.config.root=config
#启用zk的配置
spring.cloud.zookeeper.config.enabled=true

注意:目前配置的配置文件保存节点是:/config/config-demo/…

这个目录需要自己手动创建。

zookeeper集群可视化 zookeeper可视化界面_分布式_03


可以创建的节点有三种类型:

  1. application
  2. config-demo
  3. config-demo,dev(服务名+英文逗号+环境id)

第三种的环境id可配置在pom文件中,详情移步Springboot结合Maven的profiles标签实现多环境配置

zookeeper集群可视化 zookeeper可视化界面_分布式_04


三个节点中都可以保存配置文件,不过优先级不同。

config-demo,dev > config-demo > application

注意:

什么情况会动态加载?

1.静态加载:配置数据库连接,redis连接等这些配置属于静态加载,系统启动就加载进去,当用zookeeper进行后置修改时,没任何影响。比如使用注解 @Value(${xxx}) 获取配置文件参数时虽然在zookeeper修改了但获取的还是系统刚启动按照优先级加载的值。
2.动态修改

使用注解 @ConfigurationProperties

@ConfigurationProperties(prefix = "aaa")
@Component
public class AAA {
    private String bbb;
    public String getBbb() {
        return bbb;
    }
    public void setBbb(String bbb) {
        this.bbb = bbb;
    }
}

zookeeper集群可视化 zookeeper可视化界面_zookeeper集群可视化_05