spring-cloud-config,spring-cloud-zookeeper,spring-cloud-bus(kafka)配置中心服务自动更新配置总结

spring-cloud-config spring-cloud-zookeeper spring-cloud-bus(kafka)实现自动化更新服务项目总结

备注:整个过程基于IntelliJ IDEA,整个工程基于父项目版本如下:

<parent>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-parent</artifactId>
   <version>2.1.13.RELEASE</version>
   <relativePath/> <!-- lookup parent from repository -->
</parent>

集成使用spring-cloud-config,实现配置中心服务

假设已经安装好zookeeper,kafka
一、基于springboot创建工程搭建框架
  1. 创建工程项目(config-center-sample)
  2. 添加Module config-center-server作为配置中心服务
  3. 添加Moduleconfig-center-client配置中心服务引用方
二、在父项目中添加依赖统一管理
  1. 修改pom.xm如下
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.1.13.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.hitgen</groupId>
	<artifactId>config-center-sample</artifactId>
	<version>${project.version}</version>
	<name>config-center-sample</name>
	<packaging>pom</packaging>

	<modules>
		<module>config-center-server</module>
		<module>config-center-client</module>
	</modules>
	<properties>
		<project.version>0.0.1-SNAPSHOT</project.version>
		<java.version>1.8</java.version>
		<spring-cloud.version>Greenwich.SR5</spring-cloud.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
</project>
三、配置服务中心config-center-server配置
  1. 在pom.xml添加依赖

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<parent>
    		<groupId>com.hitgen</groupId>
    		<artifactId>config-center-sample</artifactId>
    		<version>0.0.1-SNAPSHOT</version>
    		<relativePath/> <!-- lookup parent from repository -->
    	</parent>
    	<groupId>com.hitgen</groupId>
    	<artifactId>config-center-server</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<name>config-center-server</name>
    	<description>Demo project for config center</description>
    
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-config-server</artifactId>
    		</dependency>
    	</dependencies>
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
    		</plugins>
    	</build>
    </project>
    
  2. 在Resources文件夹下增加文件bootstrap.yml其中增加配置,其中Spring cloud中先加载bootstrap.yml再加载application.yml中的配置,其配置文件如下:

    #application.yml
    server:
      port: 10010
    management:
      endpoints:
        web:
          exposure:
            include: '*' #通过web地址访问,暴露的path
    
    spring:
      application:
        name: config-center-server  #服务名称
    ##以下配置是spring-cloud-config 配置中心服务的配置文件存放的位置
      cloud:
        config:
          server:
            git:
              uri: https://zqlgit@dev.azure.com/zqlgit/JavaProjects/_git/configCenter  #git远程Repository
              username: Zhou_Qilin  #用户名称
              password: nbehijwmihyxjzo7xcw5v**jee4y5dup77ematt4kb2oq6jle6trqioq  #用户密码
              basedir: basedir  #git中文件下载到本地的目录
    
  3. 修改启动文件,在文件中增加相应的注解类@EnableConfigServer

    package com.hitgen.configcenterserver;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.config.server.EnableConfigServer;
    
    @SpringBootApplication
    @EnableConfigServer
    public class ConfigCenterServerApplication {
       public static void main(String[] args) {
          SpringApplication.run(ConfigCenterServerApplication.class, args);
       }
    }
    

通过以上步骤,配置中心的配置已经完成,可以启动项目正常运行。

备注:git中有文件config-center-client-dev.yml内容为:

#config-center-client-dev.yml
server:
  port: 9001
label: test-label-hitgen
四、配置客户端(config-center-client),引用配置中心的服务
  1. 添加相关依赖,其pom.xml文件内容如下

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>com.hitgen</groupId>
            <artifactId>config-center-sample</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.hitgen</groupId>
        <artifactId>config-center-client</artifactId>
        <version>${project.version}</version>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!--客户端引用配置中心服务的依赖包-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-config</artifactId>
            </dependency>
            <dependency>
                <groupId>org.junit.jupiter</groupId>
                <artifactId>junit-jupiter</artifactId>
                <version>RELEASE</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    </project>
    
  2. 在Resources文件夹下增加文件bootstrap.yml其中增加配置,其中Spring cloud中先加载bootstrap.yml再加载application.yml中的配置,其配置文件如下:

    #bootstrap.yml
    #应用名称,自动加载配置中心的配置,根据规则{uri}/[lable]/{application-name}-[profile].yml
    #生成 http://localhost:10010/master/config-center-client-dev.yml获取配置中心的配置,使用其启动项目
    spring:
      cloud:
        config:
          uri: http://localhost:10010/   #spring-cloud-config 引用配置中心的url
          label: master    #label名称
          profile: dev   #profile
      application:
        name: config-center-client #application-name
    
    
  3. 增加ClientController类,作为获取配置中心服务的配置,其内容如下:

    package com.hitgen.configcenterclient.controller;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class ClientController {
        @Value("${label:default}")
        private String label;
    
        @GetMapping("label")
        public String getLabel() {
            return label;
        }
    }
    
  4. 启动项目,浏览器中输入http://localhost:9001/label可以看到显示值为:test-label-hitgen

使用spring-cloud-discovery,以zookeeper为服务注册中心

一、config-center-server 增加spring-cloud-discovery相关依赖
  1. pom.xml文件中增加spring-cloud-starter-zookeeper-discovery,其完整配置如下

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<parent>
    		<groupId>com.hitgen</groupId>
    		<artifactId>config-center-sample</artifactId>
    		<version>0.0.1-SNAPSHOT</version>
    		<relativePath/> <!-- lookup parent from repository -->
    	</parent>
    	<groupId>com.hitgen</groupId>
    	<artifactId>config-center-server</artifactId>
    	<version>${project.version}</version>
    	<name>config-center-server</name>
    
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    		<!--配置中心服务的依赖包-->
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-config-server</artifactId>
    		</dependency>
    		<!--配置中心服务自动注册的依赖包-->
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
    		</dependency>
    	</dependencies>
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
    		</plugins>
    	</build>
    </project>
    
    
  2. 引入设置zookeeper为注册中的配置,并且设置启用服务发现注册,服务修改配置文件内容 bootstrap.yml如下:

    spring:
      application:
        name: config-center-server  #服务名称
    ##以下配置是spring-cloud-config 配置中心服务的配置文件存放的位置
      cloud:
        config:
          server:
            git:
              uri: https://zqlgit@dev.azure.com/zqlgit/JavaProjects/_git/configCenter  #git远程Repository
              username: Zhou_Qilin  #用户名称
              password: nbehijwmihyxjzo7xcw5vj4y5dup77ematt4kb2oq6jle6trqioq  #用户密码
              basedir: basedir  #git中文件下载到本地的目录
      ##zookeeper作为注册中心的配置,注册时的配置信息及说
        zookeeper: #zookeeper配种信息  此配置信息必须在bootstarp.yml文件中
          connect-string: 192.168.40.105:2181
          enabled: true
          discovery:      #注册服务
            enabled: true  #true-发现(默认值)
            root: /services #zookeeper的根目录,默认值(/services)
            instance-id: config-center-server #zookeeper叶子节点(实例)名称
            uri-spec: http://127.0.0.1:10010  #注册到zookeeper中的配置中心往外提供服务的协议及地址,默认使用环境变量 hots-name,port组合
        
    
  3. 为启动入口类ConfigCenterServerApplication增加注解@EnableDiscoveryClient,其完整代码如下:

    package com.hitgen.configcenterserver;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.cloud.config.server.EnableConfigServer;
    
    @SpringBootApplication
    @EnableConfigServer
    @EnableDiscoveryClient
    public class ConfigCenterServerApplication {
    
    	public static void main(String[] args) {
    		SpringApplication.run(ConfigCenterServerApplication.class, args);
    	}
    
    }
    
二、config-center-clientzookeeper为注册中心,增加spring-cloud-discovery的相关依赖
  1. pom.xml文件中增加spring-cloud-starter-zookeeper-discovery,其完整配置如下

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>com.hitgen</groupId>
            <artifactId>config-center-sample</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>com.hitgen</groupId>
        <artifactId>config-center-client</artifactId>
        <version>${project.ver}</version>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!--客户端引用配置中心服务的依赖包-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-config</artifactId>
            </dependency>
            <!--客户端引用自动发现配置中心服务的依赖包-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    
  2. bootstrap.yml文件中引入自动发现服务配置,其完整配置如下:

    #bootstrap.yml
    #应用名称,自动加载配置中心的配置,根据规则{uri}/[lable]/{application-name}-[profile].yml
    #生成 http://localhost:10010/master/config-center-client-dev.yml获取配置中心的配置,使用其启动项目
    spring:
      application:
        name: config-center-client #application-name
      main:
        allow-bean-definition-overriding: true  #配置zookeeper为注册中心发现服务时,必须设置该值为true,表示后注册bean覆盖前面相同的bean
      cloud:
        config:
    #      uri: http://localhost:10010/   #spring-cloud-config 引用配置中心的url
          label: master    #label名称
          profile: dev   #profile 多个逗号分隔
          discovery:
            service-id: config-center-server  #配置中心服务名称
            enabled: true #配置自动发现服务
        zookeeper:
          connect-string: 192.168.40.105:2181  #zookeeper注册中心的地址
    
  3. 启动项目,自动加载git中配置,设置服务端口为9001。浏览器中输入http://localhost:9001/label可以看到显示值为:test-label-hitgen

使用spring-cloud-bus,以kafka为消息中间件,实现服务配置自动化刷新

一、config-center-server 增加spring-cloud-starter-bus-kafka依赖包作为消息中间件
  1. pom.xml文件中引入spring-cloud-starter-bus-kafka依赖包,完整文件如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<parent>
    		<groupId>com.hitgen</groupId>
    		<artifactId>config-center-sample</artifactId>
    		<version>0.0.1-SNAPSHOT</version>
    		<relativePath/> <!-- lookup parent from repository -->
    	</parent>
    	<groupId>com.hitgen</groupId>
    	<artifactId>config-center-server</artifactId>
    	<version>${project.ver}</version>
    	<name>config-center-server</name>
    
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    		</dependency>
    		<!--配置中心服务的依赖包-->
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-config-server</artifactId>
    		</dependency>
    		<!--配置中心服务自动注册的依赖包-->
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
    		</dependency>
    		<!--配置中心服务自动更新所依赖的kafka作为消息中间件的依赖包-->
    		<dependency>
    			<groupId>org.springframework.cloud</groupId>
    			<artifactId>spring-cloud-starter-bus-kafka</artifactId>
    		</dependency>
    	</dependencies>
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
    		</plugins>
    	</build>
    </project>
    
  2. bootstrap.yml文件中引入kafka相关配置,其完整配置如下:

    spring:
      application:
        name: config-center-server  #服务名称
    ##以下配置是spring-cloud-config 配置中心服务的配置文件存放的位置
      cloud:
        config:
          server:
            git:
              uri: https://gitee.com/hql2019/config-center.git
              username: 214893847@qq.com  #用户名称
              password: gitee-zhou765219 #密码
              basedir: basedir  #git中文件下载到本地的目录
      ##zookeeper作为注册中心的配置,注册时的配置信息及说
        zookeeper: #zookeeper配种信息  此配置信息必须在bootstarp.yml文件中
          connect-string: 192.168.40.105:2181
          enabled: true
          discovery:      #注册服务
            enabled: true  #true-发现(默认值)
            root: /services #zookeeper的根目录,默认值(/services)
            instance-id: config-center-server #zookeeper叶子节点(实例)名称
            uri-spec: http://127.0.0.1:10010  #注册到zookeeper中的配置中心往外提供服务的协议及地址,默认使用环境变量 hots-name,port组合
        bus:   #以下为消息总线配置
          trace:
            enabled: true   #打开acks消息跟踪
      kafka:
        bootstrap-servers: 192.168.40.105:9092
    
  3. 启动项目

二、config-center-client增加spring-cloud-starter-bus-kafka依赖包作为消息中间件,自动更新配置信息
  1. pom.xml文件中引入spring-cloud-starter-bus-kafka依赖包,完整文件如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>com.hitgen</groupId>
            <artifactId>config-center-sample</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
        <groupId>com.hitgen</groupId>
        <artifactId>config-center-client</artifactId>
        <version>${project.ver}</version>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <!--客户端引用配置中心服务的依赖包-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-config</artifactId>
            </dependency>
            <!--客户端引用自动发现配置中心服务的依赖包-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-zookeeper-discovery</artifactId>
            </dependency>
            <!--客户端自动刷新消息的依赖包-->
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-bus-kafka</artifactId>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    </project>
    
  2. bootstrap.yml文件中引入自动发现服务配置,其完整配置如下:

    #bootstrap.yml
    #应用名称,自动加载配置中心的配置,根据规则{uri}/[lable]/{application-name}-[profile].yml
    #生成 http://localhost:10010/master/config-center-client-dev.yml获取配置中心的配置,使用其启动项目
    spring:
      application:
        name: config-center-client #application-name
      main:
        allow-bean-definition-overriding: true  #配置zookeeper为注册中心发现服务时,必须设置该值为true,表示后注册bean覆盖前面相同的bean
      cloud:
        config:
    #      uri: http://localhost:10010/   #spring-cloud-config 引用配置中心的url
          label: master    #label名称
          profile: dev   #profile 多个逗号分隔
          discovery:
            service-id: config-center-server  #配置中心服务名称
            enabled: true #配置自动发现服务
        zookeeper:
          connect-string: 192.168.40.105:2181  #zookeeper注册中心的地址
    
      kafka: #以下为kafka配置信息
        bootstrap-servers: 192.168.40.105:9092 #连接信息
    
  3. 在所需更新的类中增加@RefreshScope(),如下:

    package com.hitgen.configcenterclient.controller;
    
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.cloud.context.config.annotation.RefreshScope;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    @RefreshScope
    public class ClientController {
        @Value("${label:default}")
        private String label;
    
        @GetMapping("label")
        public String getLabel() {
            return label;
        }
    
    }
    
  4. 启动项目,更改git Repository 上文件label对应的值,并且提交。通过PostMan 请求(POST)http://localhost:10010/actuator/bus-refresh 再通过访问http://localhost:9001/label得到最新的值

三、设置WebHooks
  1. 在git服务中添加WebHook,使用Natapp工具设置内网穿透,使用地址url/actuator/bus-refresh,设置每次更新时,自动访问设置的地址

总结

按照以上的步骤,一步一步进行,能准确实现,配置中心服务,并且自动更新使用端的配置。
源码下载

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值