欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

springCloud(四集成一个config实现自动刷新)

程序员文章站 2022-03-16 18:25:29
...

前提 

安装rabbitmq

在下面连接的基础上

https://blog.csdn.net/z446981439/article/details/103628088

一、实现原理(出自 https://blog.csdn.net/wtdm_160604/article/details/83720391

1、ConfigServer(配置中心服务端)从远端git拉取配置文件并在本地git一份,ConfigClient(微服务)从ConfigServer端获取自己对应 配置文件;

2、当远端git仓库配置文件发生改变,ConfigServer如何通知到ConfigClient端,即ConfigClient如何感知到配置发生更新?

Spring Cloud Bus会向外提供一个http接口,即图中的/bus/refresh。我们将这个接口配置到远程的git的webhook上,当git上的文件内容发生变动时,就会自动调用/bus-refresh接口。Bus就会通知config-server,config-server会发布更新消息到消息总线的消息队列中,其他服务订阅到该消息就会信息刷新,从而实现整个微服务进行自动刷新。

二:实现方式

配置中心Server端承担起配置刷新的职责,原理图如下:

springCloud(四集成一个config实现自动刷新)

1、提交配置触发post请求给server端的bus/refresh接口

2、server端接收到请求并发送给Spring Cloud Bus总线

3、Spring Cloud bus接到消息并通知给其它连接到总线的客户端

4、其它客户端接收到通知,请求Server端获取最新配置

5、全部客户端均获取到最新的配置
三、新增pom jar

       <!-- springcloud-bus依赖实现配置自动更新,rabbitmq -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
        <!--监控系统健康情况的工具-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
    </dependencies>

四、添加相关配置 .yml

server:
  port: 8201
spring:
  rabbitmq:
    host: 172.18.0.88
    port: 5672
    username: guest
    password: guest
    listener:
      simple:
        concurrency: 10
        max-concurrency: 20
        prefetch: 5
    virtual-host: /
  application:
    name: config-service
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/shanghai_wuji/config-repo.git
          search-paths: '{application}'   #占位符  应用名
          # 每次都从仓库拉取文件,防止本地脏读
          force-pull: true
          #username:  公共开源可不要账号密码
          #password:
          default-label: master #git分支
eureka:
  client:
    service-url:
      defaultZone: http://127.0.0.1:8100/eureka/
  instance:
    prefer-ip-address: true
management:
  endpoints:
    web:
      exposure:
        include: "*"  #SpringCloud 2.0.0版本以后暴露接口方式
  endpoint:
    bus-refresh:
      enabled: true

至此  config-service配置完毕

五、config客户端配置

1、pom文件添加 jar

 <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
            <version>2.2.0.RELEASE</version>
        </dependency>
        <!--监控系统健康情况的工具-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>

2、使用 新建一个控制层

package com.zzh.elite.controller;

import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope
@Api(description = "配置中心自动刷新测试")
public class TestConfigController {
    @Value("${logging.config}")
    private String profile;
    @RequestMapping("/getConfig")
    @ApiOperation("配置中心自动刷新测试")
    public String getConfig(){
        return "读取配置中心"+profile;
    }
}

3、访问该路径 http://localhost:8000/elite-service/swagger-ui.html#/test-config-controller/getConfigUsingGET

4、修改相应的配置文件属性 post请求 http://localhost:8201/actuator/bus-refresh (刷新)

应该在码云配置请求路径 本地测试可手动调用

码云配置

springCloud(四集成一个config实现自动刷新)

5、再次访问 http://localhost:8000/elite-service/swagger-ui.html#/test-config-controller/getConfigUsingGET

对比两次结果是否发生改变 

如改变则成功