Spring Cloud 微服务之Bus(十二)
发布日期:2021-05-08 16:13:29 浏览次数:26 分类:精选文章

本文共 4446 字,大约阅读时间需要 14 分钟。

一、什么是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-develyum install  erlangyum install socat
    • 添加RabbitMQ仓库

      vi /etc/yum.repos.d/rabbitmq-server.repo[rabbitmq-server]name=rabbitmq-serverbaseurl=https://packagecloud.io/rabbitmq/rabbitmq-server/el/7/$basearchrepo_gpgcheck=1gpgcheck=0enabled=1gpgkey=https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkeysslverify=1sslcacert=/etc/pki/tls/certs/ca-bundle.crtmetadata_expire=300
    • 安装RabbitMQ

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

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

      在这里插入图片描述

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

  • 项目环境版本对照参考

    在这里插入图片描述

  • 服务端项目搭建

    • 添加依赖

      org.springframework.boot
      spring-boot-starter-actuator
      org.springframework.cloud
      spring-cloud-starter-bus-amqp
      org.springframework.cloud
      spring-cloud-starter-consul-discovery
    • 添加配置

      server:  port: 9000spring:  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'
  • 客户端项目搭建

    • 添加依赖

      org.springframework.boot
      spring-boot-starter-actuator
      org.springframework.cloud
      spring-cloud-starter-bus-amqp
      org.springframework.cloud
      spring-cloud-starter-consul-discovery
    • 添加配置(bootstrap.yml)

      server:  port: 9001spring:  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@RefreshScopepublic 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

    在这里插入图片描述

    在这里插入图片描述


【源码地址】:

上一篇:动态的渐变色网页背景
下一篇:Spring Cloud 微服务之Gateway(十一)

发表评论

最新留言

表示我来过!
[***.240.166.169]2025年03月23日 23时02分45秒