栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

SpringCloud 2020.0.4 系列之 Bus

SpringCloud 2020.0.4 系列之 Bus

目录

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 配置。

我们使用 RabbitMQ 作为中间件,关于 RabbitMQ 集群的搭建,可参见我的另一篇文章《RabbitMQ 3.9.7 镜像模式集群的搭建》(RabbitMQ 3.9.7 镜像模式集群的搭建_追风人的博客-CSDN博客)。

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

2. Git 准备 

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

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

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

info:
  profile: dev
    
name: zhuifengren
desc: hello dev

3. Config Server 引入 Bus 组件

3.1 主要依赖

        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        
        
            org.springframework.cloud
            spring-cloud-config-server
        
        
            org.springframework.cloud
            spring-cloud-starter-bootstrap
            3.0.2
        
        
            org.springframework.cloud
            spring-cloud-starter-bus-amqp
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        

3.2 application.yml 配置

server:
  port: 42000

spring:
  application:
    name: my-bus-server
  rabbitmq:
    addresses: 192.168.1.22:5672,192.168.1.12:5672,192.168.1.11:5672  # rabbitmq 集群的地址
    username: guest
    password: guest
    virtual-host: /
    connection-timeout: 16000
  cloud:
    config:
      server:
        git:
          uri: https://github.com/w84422/my-config-repo.git   # git地址
          force-pull: true  # 强制拉取资源文件
          default-label: main   # 默认拉取的分支
          search-paths: '{application}'      # 将配置文件放到接入方服务名称对应的文件夹下,这种写法,只在config组件设置生效

management:
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: always

eureka:
  client:
    service-url:
      defaultZone: http://zhuifengren1:35000/eureka/,http://zhuifengren2:35001/eureka/    # Eureka Server的地址

3.3 启动类增加注解

@SpringBootApplication
@EnableConfigServer
@EnableDiscoveryClient
public class MyBusServerApplication {

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

3.4 启动 Config Server

启动 Config Server

4. Config Client 引入 Bus 组件

4.1 主要依赖

        
            org.springframework.cloud
            spring-cloud-starter-netflix-eureka-client
        
        
            org.springframework.boot
            spring-boot-starter-web
        
        
            org.springframework.cloud
            spring-cloud-starter-config
            3.0.4
        
        
            org.springframework.cloud
            spring-cloud-starter-bootstrap
            3.0.2
        
        
            org.springframework.boot
            spring-boot-starter-actuator
        
        
        
            org.springframework.cloud
            spring-cloud-starter-bus-amqp
        

4.2 bootstrap.yml 配置

server:
  port: 43000

spring:
  application:
    name: my-bus-client
  rabbitmq:
    addresses: 192.168.1.22:5672,192.168.1.12:5672,192.168.1.11:5672
    username: guest
    password: guest
    virtual-host: /
    connection-timeout: 16000
  cloud:
    config:
      profile: dev  # 拉取的配置文件
      label: main   # 拉取的分支
      name: my-bus-client  # 指定远程获取配置文件的 application,默认会取 spring.application.name
      discovery:
        enabled: true
        service-id: my-bus-server    # config服务的服务名称

myDesc: ${desc}

eureka:
  client:
    service-url:
      defaultZone: http://zhuifengren1:35000/eureka/,http://zhuifengren2:35001/eureka/    # Eureka Server的地址

management:
  endpoints:
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: always

4.3 启动类增加注解

@SpringBootApplication
@EnableDiscoveryClient
public class MyBusClientApplication {

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

4.4 增加用于实验的 Controller 类

@RefreshScope
@RestController
public class MyBusClientRefreshController {

    @Value("${info.profile}")
    private String profile;
    @Value("${name}")
    private String name;
    @Value("${myDesc}")
    private String desc;

    @RequestMapping("/refresh-info")
    public String getInfo() {

        String info = "profile:" + profile + "
"; info += "name:" + name + "
"; info += "desc:" + desc + "
"; return info; } }

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,欢迎大家关注

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/422332.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号