Spring Cloud 微服务之Bus(十二)

22 篇文章 1 订阅
18 篇文章 0 订阅

一、什么是Spring Cloud Bus?

  • Spring Cloud Bus 使用轻量级的消息代理来连接微服务架构中的各个服务,可以将其用于广播状态更改(例如配置中心配置更改)或其他管理指令。
  • 我们通常会使用消息代理来构建一个主题,然后把微服务架构中的所有服务都连接到这个主题上去,当我们向该主题发送消息时,所有订阅该主题的服务都会收到消息并进行消费。使用 Spring Cloud Bus 可以方便地构建起这套机制,所以 Spring Cloud Bus 又被称为消息总线。
  • Spring Cloud Bus 配合 Spring Cloud Config 使用可以实现配置的动态刷新。
  • Spring Cloud Bus 支持两种消息代理:RabbitMQ 和 Kafka

3.实现配置的动态刷新

基于 Spring Cloud Bus 和 Spring Cloud Config 和 RabbitMQ

在这里插入图片描述

  • 搭建RabbitMQ环境

    Windows系统

    • 安装Erlang

      http://erlang.org/download/otp_win64_21.3.exe

      在这里插入图片描述

    • 安装RabbitMQ

      https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.14/rabbitmq-server-3.7.14.exe

      在这里插入图片描述

    • 进入sbin目录

      在这里插入图片描述

    • 启动管理插件

      rabbitmq-plugins enable rabbitmq_management
      

      在这里插入图片描述

    • 访问:http://localhost:15672/

      在这里插入图片描述

    • 输入账号密码并登录:guest guest

    Linus系统

    • 安装所需环境

      yum install  openssl-devel
      yum install  erlang
      yum install socat
      
    • 添加RabbitMQ仓库

      vi /etc/yum.repos.d/rabbitmq-server.repo
      
      [rabbitmq-server]
      name=rabbitmq-server
      baseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/$basearch
      repo_gpgcheck=1
      gpgcheck=0
      enabled=1
      gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
      sslverify=1
      sslcacert=/etc/pki/tls/certs/ca-bundle.crt
      metadata_expire=300
      
    • 安装RabbitMQ

      dnf makecache -y --disablerepo='*' --enablerepo='rabbitmq-server'
      dnf install -y rabbitmq-server
      rpm -qi rabbitmq-server
      
    • 启动相关服务

      service rabbitmq-server start
      rabbitmq-plugins enable rabbitmq_management
      
    • 访问:http://localhost:15672/


      在这里插入图片描述

    • 输入账号密码并登录:guest guest

  • 项目环境版本对照参考

    在这里插入图片描述

  • 服务端项目搭建

    • 添加依赖

      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-actuator</artifactId>
      </dependency>
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-bus-amqp</artifactId>
      </dependency>
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-consul-discovery</artifactId>
      </dependency>
      
    • 添加配置

      server:
        port: 9000
      
      spring:
        application:
          name: config-server
        # consul相关配置  
        cloud:
          consul:
            host: localhost
            port: 8500
            discovery:
              service-name: ${spring.application.name}
          config:
            server:
              git:
                uri: https://gitee.com/prochick/spring-cloud-config.git
                username: xxx
                password: xxx
                clone-on-start: true
                default-label: dev
                basedir: E:/conf
        # rabbitmq相关配置      
        rabbitmq: 
          host: localhost
          port: 5672
          username: guest
          password: guest
          
      #暴露springcloud bus的刷新配置端点    
      management:
        endpoints: 
          web:
            exposure:
              include: 'bus-refresh'
      
  • 客户端项目搭建

    • 添加依赖

      <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-actuator</artifactId>
      </dependency>
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-bus-amqp</artifactId>
      </dependency>
      <dependency>
          <groupId>org.springframework.cloud</groupId>
          <artifactId>spring-cloud-starter-consul-discovery</artifactId>
      </dependency>
      
    • 添加配置(bootstrap.yml)

      server:
        port: 9001
      
      spring:
        application:
          name: config-client
        # consul相关配置  
        cloud:
          consul:
            host: localhost
            port: 8500
            discovery:
              service-name: ${spring.application.name}
          config:
            uri: http://localhost:9000
            label: master
            name: client
            profile: dev
            fail-fast: true
        # rabbitmq相关配置      
        rabbitmq: 
          host: localhost
          port: 5672
          username: guest
          password: guest
          
      # 暴露springcloud config的刷新配置端点    
      management:
        endpoints: 
          web:
            exposure:
              include: 'refresh'
      
    • 添加控制器

      @RestController
      @RefreshScope
      public class ConfigController {
      
          @Value("${name}")
          private String name;
      
          @GetMapping("/configInfo")
          public String getConfigInfo() {
      
              return name;
          }
      }
      
    • 添加远程配置文件

      # 文件内容
      name: zhangsan
      

      在这里插入图片描述

  • 测试

    ├── consul-server – consul注册中心

    ├── config-server – 配置中心服务

    ├── config-client1 – 配置客户端服务1

    ├── config-client2 – 配置客户端服务2

    • 启动所有服务后,我们登录RabbitMQ的控制台可以发现Spring Cloud Bus 创建了一个叫springCloudBus的交换机及三个以 springCloudBus.anonymous开头的队列:

      在这里插入图片描述

      在这里插入图片描述

    • 分别调用http://localhost:9001/configInfo 和 http://localhost:9002/configInfo 获取配置信息

      返回结果:zhangsan
      
    • 我们修改Git仓库中master分支下的client-dev.yml配置文件:

      # 文件内容
      name: lisi
      
    • 刷新 config server

      # 全部刷新
      curl -X POST http://localhost:9000/actuator/bus-refresh
      # 指定服务集群刷新
      curl -X POST http://localhost:9000/actuator/bus-refresh/user-service
      # 指定服务节点刷新
      curl -X POST http://localhost:9000/actuator/bus-refresh/user-service:8081
      
    • 分别调用http://localhost:9001/configInfo 和 http://localhost:9002/configInfo 获取配置信息

      返回结果:lisi
      

3.结合WebHooks实现自动刷新

WebHooks相当于是一个钩子函数,我们可以配置当向Git仓库push代码时触发这个钩子函数,当我们向配置仓库push代码时就会自动刷新服务配置了。

  • 使用GitEE

    在这里插入图片描述

  • 使用GitHub

    在这里插入图片描述

    在这里插入图片描述


【源码地址】:GitHub

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程小吉

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值