Spring Cloud Config 使用bus 实现刷新所有客户端

1.使用码云创建配置仓库(可以根据需要更改,比如github,gitlab)都一个意思

我根据服务名称创建了两个文件夹分别存放不同模块对应的配置信息

然后分别在各自的文件夹中添加属性,等接下来进行测试

sys-dev.yml的配置

 web-dev.yml的配置

以下提到的模块均有一个父模块,其主要pom如下

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

 springcloud版本 和alibaba cloud 版本

            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR1</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

2.新建configServer 模块

创建一个服务端配置模块,就是创建一个springboot项目

pom中关键的依赖如下: 我使用的nacos做的注册中心,nacos也可以做配置中心-->,(nacos做配置中心)我这里暂且只使用他当注册中心

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

yml文件如下:

spring:
  application:
    name: configServer # 服务名称
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 # nacos地址
    config:
      server:
        git:
          uri: 上一步创建的git地址
          username: 你的git用户名
          password: 你的git密码
          search-paths: /** # 因为我分了文件件,这里代表搜索所有文件目录
server:
  port: 8888  # 服务端的端口号

启动类如下:

@SpringBootApplication
@EnableConfigServer //开启配置服务端
@EnableDiscoveryClient //开启注册功能,将本服务注册到nacos 注册中心
public class ConfigApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigApplication.class, args);
    }

}

3.新建客户端

我这边准备了两个客户端,模块名称叫做sys和web,因为两个基本一样,我这边就拿web举例子

pom如下:

        <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>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>

在recources目录下创建bootstrap.yml 内容如下:

spring:
  application:
    name: web  # 应用名称,需要和git上的web-dev.yml中的web保持一致
  cloud:
    config:
      discovery:
        enabled: true
        service-id: configServer #指定配置服务的名称
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848 #nacos的路径 
  profiles:
    active: dev # 激活哪个配置文件, 此代表拉取web-dev.yml这个文件 {application}-{profiles}.yml

management:
  endpoints:
    web:
      exposure:
        include: "*" 用来暴露刷新接口

还配置了一个application.yml 内容如下:

server:
  port: 9000
spring:
  rabbitmq:
    host: 192.168.234.128
    port: 5672
    username: guest
    password: guest


启动类如下:

@SpringBootApplication
@EnableDiscoveryClient
public class WebApplication {
    public static void main(String[] args) {
        SpringApplication.run(WebApplication.class, args);
    }
}

 

4.使用docker安装rabbitMQ

 之前我写过一个用docker安装rabbitMQ ,并且正常访问web页面的一个文章,可以直接去那看,如果已经安装好了的话,可略过

地址: docker 安装rabbitMQ

5.测试 以上都完成之后,接下来就进行测试

    5.1 启动nacos注册中心

    5.2 启动configServer 模块

    5.3 启动 sys 和web 模块

    5.4 修改git上的两个配置 ,然后刷新, 随便请求某一个客户端的bus-refresh即可,比如我请求一个web的

    发送一个post请求.可以使用postman工具

    http://127.0.0.1:9000/actuator/bus-refresh

    完成了所有模块的刷新,可以访问这个 http://127.0.0.1:9000/getConfName 进行测试

@RestController
@RefreshScope
public class TestConfig {

    @Value("${name}") //读取配置文件的值,这里直接是读取的git上的该值
    private String name;

    @GetMapping("getConfName")
    public String getConfName() {
        return name;
    }
}

   假设只是修改了某一个服务的配置,不想全部模块都刷新, 那么可以执行

    http://127.0.0.1:9000/actuator/refresh

   这样只会刷新web模块9000 端口的这个实例,如果说我们在一个服务器上部署两个web,那么另一个的端口不能再使用9000了,

   比如使用9002 那么上面的操作我们是刷新不了9002那个实例的配置的,需要执行

    http://127.0.0.1:9002/actuator/refresh 来刷新另一个实例

   同理,但我们把服务部署到不同的服务器上,那么没个实例的ip也不一致,也只能一个个刷新,

   因此 refresh  和 bus-refresh 可以具体情况具体使用, 都能实现动态刷新配置的功能

   Spring Cloud config  通过rabbitmq 和bus 实现了动态刷新,有机会写一下nacos实现配置的刷新

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值