• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

SpringCloud 2020.0.4 系列: Bus

武飞扬头像
追风人聊Java
帮助1

目录

1. 概述

2. Git 准备 

3. Config Server 引入 Bus 组件

4. Config Client 引入 Bus 组件

5. 综述

6. 个人公众号


1. 概述

老话说的好:会休息的人才更会工作,身体是革命的本钱,身体垮了,就无法再工作了。

言归正传,之前我们聊了 SpringCloud 的 分布式配置中心 Config,文章里我们聊了config配置的动态刷新,但这个动态刷新,一次只能刷新一个 Config Client 节点,如果服务节点少还好,如果业务多了,有成百上千个服务节点,再一台一台刷新,就不合适了。

因此,今天我们来聊聊 SpringCloud的消息总线组件 Bus,Bus 组件可以借助MQ中间件,向所有的 Config Client 发送刷新广播,只需要调用一个接口,就可以刷新整个集群的Config 配置。

闲话不多说,直接上代码。

2. Git 准备 

1)创建一个 repository,用于放置配置文件,例如:my-config-repo

2)创建 my-bus-client 文件夹

3)在 my-bus-client 文件夹下,新建 my-bus-client-dev.yml 配置文件,内容如下:

  1.  
    info:
  2.  
    profile: dev
  3.  
     
  4.  
    name: zhuifengren
  5.  
    desc: hello dev

3. Config Server 引入 Bus 组件

3.1 主要依赖

  1.  
    <dependency>
  2.  
    <groupId>org.springframework.cloud</groupId>
  3.  
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  4.  
    </dependency>
  5.  
    <dependency>
  6.  
    <groupId>org.springframework.cloud</groupId>
  7.  
    <artifactId>spring-cloud-config-server</artifactId>
  8.  
    </dependency>
  9.  
    <dependency>
  10.  
    <groupId>org.springframework.cloud</groupId>
  11.  
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
  12.  
    <version>3.0.2</version>
  13.  
    </dependency>
  14.  
    <dependency>
  15.  
    <groupId>org.springframework.cloud</groupId>
  16.  
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
  17.  
    </dependency>
  18.  
    <dependency>
  19.  
    <groupId>org.springframework.boot</groupId>
  20.  
    <artifactId>spring-boot-starter-actuator</artifactId>
  21.  
    </dependency>
学新通

3.2 application.yml 配置

  1.  
    server:
  2.  
    port: 42000
  3.  
     
  4.  
    spring:
  5.  
    application:
  6.  
    name: my-bus-server
  7.  
    rabbitmq:
  8.  
    addresses: 192.168.1.22:5672,192.168.1.12:5672,192.168.1.11:5672 # rabbitmq 集群的地址
  9.  
    username: guest
  10.  
    password: guest
  11.  
    virtual-host: /
  12.  
    connection-timeout: 16000
  13.  
    cloud:
  14.  
    config:
  15.  
    server:
  16.  
    git:
  17.  
    uri: https://github.com/w84422/my-config-repo.git # git地址
  18.  
    force-pull: true # 强制拉取资源文件
  19.  
    default-label: main # 默认拉取的分支
  20.  
    search-paths: '{application}' # 将配置文件放到接入方服务名称对应的文件夹下,这种写法,只在config组件设置生效
  21.  
     
  22.  
    management:
  23.  
    endpoints:
  24.  
    web:
  25.  
    exposure:
  26.  
    include: '*'
  27.  
    endpoint:
  28.  
    health:
  29.  
    show-details: always
  30.  
     
  31.  
    eureka:
  32.  
    client:
  33.  
    service-url:
  34.  
    defaultZone: http://zhuifengren1:35000/eureka/,http://zhuifengren2:35001/eureka/ # Eureka Server的地址
学新通

3.3 启动类增加注解

  1.  
    @SpringBootApplication
  2.  
    @EnableConfigServer
  3.  
    @EnableDiscoveryClient
  4.  
    public class MyBusServerApplication {
  5.  
     
  6.  
    public static void main(String[] args) {
  7.  
    SpringApplication.run(MyBusServerApplication.class, args);
  8.  
    }
  9.  
    }

3.4 启动 Config Server

启动 Config Server

4. Config Client 引入 Bus 组件

4.1 主要依赖

  1.  
    <dependency>
  2.  
    <groupId>org.springframework.cloud</groupId>
  3.  
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  4.  
    </dependency>
  5.  
    <dependency>
  6.  
    <groupId>org.springframework.boot</groupId>
  7.  
    <artifactId>spring-boot-starter-web</artifactId>
  8.  
    </dependency>
  9.  
    <dependency>
  10.  
    <groupId>org.springframework.cloud</groupId>
  11.  
    <artifactId>spring-cloud-starter-config</artifactId>
  12.  
    <version>3.0.4</version>
  13.  
    </dependency>
  14.  
    <dependency>
  15.  
    <groupId>org.springframework.cloud</groupId>
  16.  
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
  17.  
    <version>3.0.2</version>
  18.  
    </dependency>
  19.  
    <dependency>
  20.  
    <groupId>org.springframework.boot</groupId>
  21.  
    <artifactId>spring-boot-starter-actuator</artifactId>
  22.  
    </dependency>
  23.  
    <!-- rabbitmq -->
  24.  
    <dependency>
  25.  
    <groupId>org.springframework.cloud</groupId>
  26.  
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
  27.  
    </dependency>
学新通

4.2 bootstrap.yml 配置

  1.  
    server:
  2.  
    port: 43000
  3.  
     
  4.  
    spring:
  5.  
    application:
  6.  
    name: my-bus-client
  7.  
    rabbitmq:
  8.  
    addresses: 192.168.1.22:5672,192.168.1.12:5672,192.168.1.11:5672
  9.  
    username: guest
  10.  
    password: guest
  11.  
    virtual-host: /
  12.  
    connection-timeout: 16000
  13.  
    cloud:
  14.  
    config:
  15.  
    profile: dev # 拉取的配置文件
  16.  
    label: main # 拉取的分支
  17.  
    name: my-bus-client # 指定远程获取配置文件的 application,默认会取 spring.application.name
  18.  
    discovery:
  19.  
    enabled: true
  20.  
    service-id: my-bus-server # config服务的服务名称
  21.  
     
  22.  
    myDesc: ${desc}
  23.  
     
  24.  
    eureka:
  25.  
    client:
  26.  
    service-url:
  27.  
    defaultZone: http://zhuifengren1:35000/eureka/,http://zhuifengren2:35001/eureka/ # Eureka Server的地址
  28.  
     
  29.  
    management:
  30.  
    endpoints:
  31.  
    web:
  32.  
    exposure:
  33.  
    include: '*'
  34.  
    endpoint:
  35.  
    health:
  36.  
    show-details: always
学新通

4.3 启动类增加注解

  1.  
    @SpringBootApplication
  2.  
    @EnableDiscoveryClient
  3.  
    public class MyBusClientApplication {
  4.  
     
  5.  
    public static void main(String[] args) {
  6.  
    SpringApplication.run(MyBusClientApplication.class, args);
  7.  
    }
  8.  
    }

4.4 增加用于实验的 Controller 类

  1.  
    @RefreshScope
  2.  
    @RestController
  3.  
    public class MyBusClientRefreshController {
  4.  
     
  5.  
    @Value("${info.profile}")
  6.  
    private String profile;
  7.  
    @Value("${name}")
  8.  
    private String name;
  9.  
    @Value("${myDesc}")
  10.  
    private String desc;
  11.  
     
  12.  
    @RequestMapping("/refresh-info")
  13.  
    public String getInfo() {
  14.  
     
  15.  
    String info = "profile:" profile "<br>";
  16.  
    info = "name:" name "<br>";
  17.  
    info = "desc:" desc "<br>";
  18.  
     
  19.  
    return info;
  20.  
    }
  21.  
    }
学新通

4.5 启动 Config Client 服务,并进行验证

4.5.1 启动 Config Client 服务

启动两个或多个 Config Client 服务

4.5.2 访问 Controller 接口,获取配置信息

GET http://localhost:43000/refresh-info

学新通

4.5.3 修改 Git 上的配置

将 name 改为 zhangsan

4.5.4 执行bus配置刷新接口

在 Config Server 或 任意 Config Client 节点,执行 bus 配置刷新接口

POST http://localhost:42000/actuator/busrefresh

4.5.5 在所有 Config Client 节点调用 Controller 接口,重新获取信息

GET http://localhost:43000/refresh-info

学新通

5. 综述

今天聊了一下 SpringCloud 的 Bus 组件,希望可以对大家的工作有所帮助。

欢迎帮忙点赞、评论、转发、加关注 :)

关注追风人聊Java,每天更新Java干货。

6. 个人公众号

追风人聊Java,欢迎大家关注

学新通

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhiaejke
系列文章
更多 icon
同类精品
更多 icon
继续加载