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

前言:

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

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

2、新建eureka的server端工程。

maven依赖如下:

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>

配置文件添加配置

#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服务端工程

添加依赖

<dependencies>
        <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-streams</artifactId>
    </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-bus</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-kafka</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-kafka</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-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

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文件,并添加配置

#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客户端工程

添加依赖

<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-bus-kafka</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-stream-kafka</artifactId>
        </dependency>

        <dependency>
            <groupId>org.apache.kafka</groupId>
            <artifactId>kafka-streams</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-bus</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-actuator-autoconfigure</artifactId>
        </dependency>

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中提前建好的文件

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

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

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

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

小结:

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

 

猜你喜欢

转载自blog.csdn.net/lw1124052197/article/details/103804640
今日推荐