[toc]

本次演示为通知配置中心,进行通知到各个客户端
image.png

本次演示rabbitmq为docker安装,进行远程访问。
安装步骤在上一篇:https://liudongdong.top/archives/springcloudsan-shi-bus-zong-xian-jie-shao-he-huan-jing-zhun-bei

一、修改配置服务cloud-config-center-3344

1. pom文件新增mq依赖

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

2. 修改yaml配置文件

新增mq配置和暴露服务

  rabbitmq:
    host: 192.168.158.128
    port: 5672
    username: admin
    password: admin

management:
  endpoints:
    web:
      exposure:
        include: "bus-refresh"

image.png

二、修改配置客户端cloud-config-center-3355

1. pom文件新增mq依赖

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

2. 修改yaml配置文件

新增mq配置和暴露服务

  rabbitmq:
    host: 192.168.158.128
    port: 5672
    username: admin
    password: admin

management:
  endpoints:
    web:
      exposure:
        include: "*"

二、创建客户端cloud-config-center-3366

1. 修改pom文件

<?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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>cloud_learn</artifactId>
        <groupId>org.cloud.learn</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>cloud-config-client-3366</artifactId>


    <dependencies>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>com.atguigu.springcloud</groupId>
            <artifactId>cloud-api-commons</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
    </dependencies>
</project>

2. 创建yaml配置文件

server:
  port: 3366

spring:
  application:
    name: config-client
  cloud:
    config:
      label: master
      name: config
      profile: dev
      uri: http://localhost:3344
  rabbitmq:
    host: 192.168.158.128
    port: 5672
    username: admin
    password: admin
eureka:
  client:
    service-url:
      defaultZone: http://eureka9001.com:9001/eureka
management:
  endpoints:
    web:
      exposure:
        include: "*"

三、测试

1. 依次启动项目

image.png

2. 修改gitee配置

image.png

3. 刷新配置服务

地址:http://localhost:3344/config-dev.yaml
类型:GET
结果:如下
image.png

4. 刷新3355和3366客户端

地址:http://localhost:3355/configInfo
地址:http://localhost:3366/configInfo
类型:GET
结果:发现配置没有更新到最新配置
题外话(有点失望,原以为是修改后,就自动更新到最新~)
image.png
image.png

5. 通知配置服务,进而广播到客户端

地址:http://localhost:3344/actuator/bus-refresh
类型:POST
结果:如下
image.png

6. 这时再次刷新客户端

发现配置已经更新为最新
image.png
image.png

四、定向通知

image.png

由于bus内部实现为rabbitmq消息队列实现,消息更新是采用广播形式。那么指定通知,就是针对性进行广播,而相应逻辑bus进行了封装,所以通过结果请求,进行定向通知。
通知形式如下:
http://localhost:配置中心的端口号/actuator/bus-refresh/

1. 通知客户端3355

修改配置
image.png
通知配置中心:
地址:http://localhost:3344/actuator/bus-refresh/config-client:3355
类型:POST
结果:如下
image.png
image.png
image.png

2. 通知多个客户端3355和3366

采用正则形式进行通知
修改配置服务
image.png

通知配置服务
地址:http://localhost:3344/actuator/bus-refresh/config-client:33**
类型:POST
结果:
image.png

刷新客户端
image.png
image.png

3. 反思

修改配置文件后,还需要进行调用接口通知配置服务,增加了额外工作。并没有完全解放,当修改后,实时获取最新配置。

Q.E.D.


只有创造,才是真正的享受,只有拚搏,才是充实的生活。