Springcloud Bus消息总线

目录

1、概述

1.1、Springcloud Bus 概念

1.2、Springcloud Bus 作用

1.3、总线

1.4、设计思想

1.4.1、利用消息总线触发一个客户端/bus/refresh,而刷新所有客户端的配置

1.4.2、利用消息总线触发一个服务端ConfigServer的/bus/refresh端点,刷新所有客户端的配置

1.4.3、通常采用第二种设计思想 

2、RabbitMQ 环境配置

2.1、下载安装Erlang

2.1.1、下载地址 :Downloads - Erlang/OTP

2.1.2、安装

2.1.3、将Erlang添加至环境变量中

2.1.4、测试

2.2、安装RabbitMQ

3、SpringCloud Bus动态刷新全局广播

3.1、配置好RabbitMQ环境

3.2、新建微服务

3.2.1、服务端 

3.2.2、客户端

3.3、给配置中心服务端添加消息总线支持

3.3.1、修改POM文件

3.3.2、修改yaml配置文件

3.4、给配置中心客户端添加消息总线支持

3.4.1、修改POM文件

3.4.2、修改yaml配置文件

3.5、测试

4、SpringCloud Bus动态定点通知

4.1、需求具体说明

4.2、操作方法


1、概述

1.1、Springcloud Bus 概念

1)SpringCloud Bus 是用来将分布式系统的节点与轻量级消息系统链接起来的框架

2)SpringCloud Bus 整合了 Java 的事件处理机制和消息中间件的功能

3)SpringCloud Bus 目前支持RabbitMQ和Kafka

Springcloud Bus消息总线_第1张图片

1.2、Springcloud Bus 作用

1)SpringCloud Bus 能管理和传播分布式系统间的消息,类似一个分布式执行器。

2)SpringCloud Bus 可用于广播状态更改、事件推送以及微服务间的通信通道。

1.3、总线

  • 在微服务架构的系统中,通常会使用轻量级的消息代理来构建一个公用的消息主题。
  • 将系统中的所有微服务实例都连接至消息主题中。
  • 由于该消息主题中产生的消息会被所有实例监听和消费,所以称为消息总线。
  • 总线上的各个实例,都可以方便地广播一些需要让其他链接在该主题行的实例都知道的消息。

1.4、设计思想

1.4.1、利用消息总线触发一个客户端/bus/refresh,而刷新所有客户端的配置

Springcloud Bus消息总线_第2张图片

 

1.4.2、利用消息总线触发一个服务端ConfigServer的/bus/refresh端点,刷新所有客户端的配置

Springcloud Bus消息总线_第3张图片

1.4.3、通常采用第二种设计思想 

  • 第一种打破了微服务的职责单一性,因为微服务本身是业务模块,不应该承担配置刷新的职责
  • 第一种打破了微服务各个节点的对等性。
  • 第一种有一定的局限性:
    • 微服务在迁移时,其网络地址常常会发生变化,想要做到自动刷新,会增加更多的修改

2、RabbitMQ 环境配置

  • 由于RabbitMQ是基于erlang的,所以,在正式安装RabbitMQ之前,需要先安装erlang。
  • RabbitMQ Erlang Version对应关系:RabbitMQ Erlang Version Requirements — RabbitMQ

2.1、下载安装Erlang

2.1.1、下载地址 :Downloads - Erlang/OTP

Springcloud Bus消息总线_第4张图片

2.1.2、安装

Springcloud Bus消息总线_第5张图片

2.1.3、将Erlang添加至环境变量中

   1.在系统变量中添加ERLANG_HOME,为Erlang中bin目录的根目录

Springcloud Bus消息总线_第6张图片

 2.在Path目录下添加%ERLANG_HOME%\bin

Springcloud Bus消息总线_第7张图片

2.1.4、测试

2.2、安装RabbitMQ

 进入官网下载 https://www.rabbitmq.com/download.html,直接安装即可。

3、SpringCloud Bus动态刷新全局广播

3.1、配置好RabbitMQ环境

3.2、新建微服务

  • 创建一个配置中心服务端微服务,以及两个客户端微服务
  • 创建过程参考:SpringCloud config分布式配置中心_我的眼里只有学习的博客-CSDN博客

3.2.1、服务端 

Springcloud Bus消息总线_第8张图片

3.2.2、客户端

Springcloud Bus消息总线_第9张图片

3.3、给配置中心服务端添加消息总线支持

3.3.1、修改POM文件

        添加消息总线相关依赖


    org.springframework.cloud
    spring-cloud-starter-bus-amqp

3.3.2、修改yaml配置文件

        添加rabbitmq相关配置:

server:
  port: 3344
spring:
  application:
    name: cloud-config-center #注册进eureka的微服务名称

  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/uclass/springcloud-config.git  #git仓库名字
          # 搜索目录
          search-paths:
            - springcloud-config
      # 读取分支
      label: master

  # rabbitmq相关配置
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest

eureka:
  client:
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka

# 暴露bus刷新配置的端点
management:
  endpoints:
    web:
      exposure:
        include: 'bus-refresh'

3.4、给配置中心客户端添加消息总线支持

3.4.1、修改POM文件

        添加消息总线相关依赖


    org.springframework.cloud
    spring-cloud-starter-bus-amqp

3.4.2、修改yaml配置文件

        添加rabbitmq相关配置:

server:
  port: 3355

spring:
  application:
    name: config-client
  cloud:
    # 客户端配置(通过3344获得git中的配置文件)
    config:
      label: master  #分支名称
      name: config  #配置文件名称
      profile: dev  #读取后缀名称   上述三个综合http://config-3344.com:3344/master/config-dev.yml
      uri: http://localhost:3344/  #配置中心的地址

  # rabbitmq相关配置
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest

eureka:
  client:
    service-url:
      defaultZone: http://localhost:7001/eureka

# 暴露监控端点
management:
  endpoints:
    web:
      exposure:
        include: "*"

3.5、测试

1.修改git远程仓库配置信息

2.curl -X POST "http://localhost:3344/actuator/bus-refresh" 刷新配置中心服务端 

3.访问url,查看读取到的相关配置信息

  • 配置中心:http://localhost:3344/config-dev.yml
  • 服务端:http://localhost:3355/config-dev.yml、http://localhost:3366/config-dev.yml

4.该方法,一次修改,广播通知,处处生效

4、SpringCloud Bus动态定点通知

4.1、需求具体说明

当配置信息发生修改时,不想通知全部微服务,只想定点通知特定微服务

4.2、操作方法

  • 指定具体某一实例生效而不是全部
  • 公式:http://lcoalhost:配置中心的端口号/actuator/bus-refresh/{destination}
  • 以只刷新运行在3355端口上的config-client为例:
    • curl -X POST "http://localhost:3344/actuator/bus-refresh/config-clent:3355"
    • {destination}表示具体的微服务名称及其端口号

你可能感兴趣的:(微服务技术栈,spring,cloud,rabbitmq,erlang)