微服务学习笔记Spring Cloud Config + Spring Cloud Bus + kafka实现配置中心配置动态更新

前言:

微服务架构中springcloud config的优点我在这就不在赘述了。

1、搭建kafka服务。我在自己买的云服务器上使用docker搭建了一个kafka单节点服务,详见上两篇博客《docker 安装zookeeper+kafka单节点》和《腾讯云上docker安装kafka单节点问题记录》。

2、新建eureka的server端工程。

maven依赖如下:


            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-server
        

配置文件添加配置

#eureka服务器要监听的端口
server.port=8761
#eureka服务端服务名
spring.application.name=naom-eurekaServer-service

eureka.instance.hostname=localhost
eureka.instance.prefer-ip-address=true
#eureka服务访问路径
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
#不要使用eureka服务进行注册
eureka.client.registerWithEureka=false
#不要在本地缓存注册表信息
eureka.client.fetchRegistry=false

3、新建springcloud config服务端工程

添加依赖


        
        org.apache.kafka
        kafka-streams
    
        
            org.springframework.cloud
            spring-cloud-bus
        

        
            org.springframework.cloud
            spring-cloud-starter-bus-kafka
        

        
            org.springframework.cloud
            spring-cloud-starter-stream-kafka
        

        
            org.springframework.cloud
            spring-cloud-config-server
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        

application.properties配置文件内容如下:

#springcloud配置中心端口号
server.port=9090
#配置中心服务端服务名
spring.application.name=naom-configServer-service
##配置中心的GitHub远程地址
spring.cloud.config.server.git.uri=https://github.com/luweiGh/config-git.git
#GitHub用户名
spring.cloud.config.server.git.username=lu***
#GitHub密码
spring.cloud.config.server.git.password=*****

#---------------------eureka配置开始--------------------
#eureka服务位置
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
#注册服务的IP,而不是服务器名称
eureka.instance.prefer-ip-address=true
#向eureka服务注册服务
eureka.client.register-with-eureka=true
#拉去注册表的本地副本
eureka.client.fetch-registry=true
#---------------------eureka配置结束--------------------

新增bootstrap.properties文件,并添加配置

微服务学习笔记Spring Cloud Config + Spring Cloud Bus + kafka实现配置中心配置动态更新_第1张图片

#springcloud kafka配置
#kafka服务端链接
spring.kafka.bootstrap-servers=http://111.**.345.12:9092
#kafka消息topic
spring.kafka.consumer.group-id=springcloudConfig
#Spring boot actuator所有端点启用
management.endpoints.web.exposure.include=*
#springcloud bus动态刷新开启
spring.cloud.bus.refresh.enabled=true

4、新建springcloud config客户端工程

添加依赖


            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.cloud
            spring-cloud-starter-config
        

        
            org.springframework.cloud
            spring-cloud-starter-bus-kafka
        

        
            org.springframework.cloud
            spring-cloud-starter-stream-kafka
        

        
            org.apache.kafka
            kafka-streams
        
        
            org.springframework.cloud
            spring-cloud-bus
        

        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        

        
            org.springframework.cloud
            spring-cloud-starter-netflix-hystrix
        
        
            org.springframework.cloud
            spring-cloud-starter-netflix-hystrix-dashboard
        
        
            org.springframework.cloud
            spring-cloud-starter-openfeign
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        

        
            org.springframework.boot
            spring-boot-actuator-autoconfigure
        

application.properties配置文件内容如下:

#消息服务的监听端口
server.port=8081

#配置中心服务端服务名
spring.application.name=naom-message-service

#---------------------eureka配置开始--------------------
#eureka服务位置
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/
#注册服务的IP,而不是服务器名称
eureka.instance.prefer-ip-address=true
#向eureka服务注册服务
eureka.client.register-with-eureka=true
#拉去注册表的本地副本
eureka.client.fetch-registry=true
#---------------------eureka配置结束--------------------

新增bootstrap.yml文件,并添加配置

#---------------------springCloud config配置开始---------------
#springCloud服务端的服务名
spring:
  cloud:
    config:
  #springcloud服务端的链接
      uri: http://localhost:9090/
  #文件环境(生产、测试、生产等)
      profile: dev
  #master分支
      label: master
  #
      name: naom-configServer-service
  #开启spring cloud bus
    bus:
      refresh:
        enabled: true
  #kafka服务端
  kafka:
    bootstrap-servers:
    - 111.229.89.171:9092
#暴露Spring boot actuator所以端点
management:
  endpoints:
    web:
      exposure:
        include: '*'

新建controller测试类

package com.naom.message.controller;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
//一定别忘了这个哦
@RefreshScope
public class SpringConfigTestController {

    @Value("${brach}")
    private String brach;
    @RequestMapping(value = "getSpringCloudConfigMsg")
    public String getSpringCloudConfigMsg(){
        String configMsg = "在config服务端拿到的brach为"+brach;
        return configMsg;
    }
}

5、进行动态刷新测试

查看我的GitHub中提前建好的文件

微服务学习笔记Spring Cloud Config + Spring Cloud Bus + kafka实现配置中心配置动态更新_第2张图片

分别启动eureka服务端、springcloud config服务端、springcloud config客户端,访问springcloud config客户端的测试controller。

微服务学习笔记Spring Cloud Config + Spring Cloud Bus + kafka实现配置中心配置动态更新_第3张图片

现在我修改GitHub中该文件的内容

微服务学习笔记Spring Cloud Config + Spring Cloud Bus + kafka实现配置中心配置动态更新_第4张图片

 

在postman中调用springcloud config服务端的actuator/bus-refresh

微服务学习笔记Spring Cloud Config + Spring Cloud Bus + kafka实现配置中心配置动态更新_第5张图片

接着访问springcloud config客户端的测试controller,结果返回结果就发生了变化。

微服务学习笔记Spring Cloud Config + Spring Cloud Bus + kafka实现配置中心配置动态更新_第6张图片

 

小结:

我们各个微服务的一些配置交给config服务端管理,修改Git仓库的配置。只需要调用spring boot actuator的refresh接口,所有的微服务的配置都动态发生了变化。

 

你可能感兴趣的:(程序架构)