天天看點

springcloud----消息總線--Bus概述使用RabbitMQ搭建消息總線

概述

解決什麼問題?

  • 分布式自動重新整理配置功能
  • 可以結合 SpringCloud Config 實作自動重新整理配置

是什麼?

  • Bus 支援兩種消息代理 : RabbitMQ、Kafka

為什麼被稱作總線

  • Spring Cloud Bus 配合過SpringCloud Config 可以實作配置的動态重新整理
    springcloud----消息總線--Bus概述使用RabbitMQ搭建消息總線
  • Spring Cloud Bus 是用來将分布式系統的節點與輕量級消息系統連結起來的架構,

它整合了Java的事件處理機制和消息中間中間件功能

  • 什麼是總線

    在微服務架構的系統中,通常會使用 輕量級的消息代理 來建構一個

    共用的消息主題

    , 炳然系統同中所有的微服務執行個體都連接配接上來,由于該主題中産生的

    消息會被所有執行個體監聽和消費

    ,是以它成為

    消息總線

    。在總線的各個執行個體,都可以友善地廣播一些需要讓其他連結在該主題上的執行個體都知道的消息。
  • 基本原理

    Config Clinet 執行個體會監聽MQ中同一個 Topic (預設是 springCloudBus ). 當一個服務刷星資料的時候,會把這個資訊放入到 Topic 彙總,這樣其他監聽同一個 topic 服務就能得到通知,然後更新自身的配置。

使用RabbitMQ搭建消息總線

  • 安裝RabbitMQ
  • 啟動: 在bin目錄下執行 rabbitmq-plugins enable rabbitmq_management
  • 也可以通過可視化界面 進行啟動

SpringCloud Bus 動态重新整理全局廣播

廣播效果,需要準備2個接受服務

設計思想

1)利用消息總線觸發一個用戶端 /bus/refresh, 而重新整理所有用戶端的配置

springcloud----消息總線--Bus概述使用RabbitMQ搭建消息總線

2)利用消息總線觸發一個服務端 ConfigServer 的 bus/refresh 端點,而重新整理所有用戶端的配置

springcloud----消息總線--Bus概述使用RabbitMQ搭建消息總線

第二種方案更加合适,第一種方案不合适的原因:

  1. 打破了微服務的

    職責單一性

    ,因為

    微服務

    本身是業務子產品,它本不應該承擔配置重新整理的職責
  2. 破壞了微服務

    各個節點的對等性

  3. 有一定的

    局限性

    ,例如, 在微服務遷移時,它的網絡位址常常會發生變化,如果此時時想自動重新整理,會增加更多的工作

實作

一: 配置中心添加消息支援

  1. 添加依賴
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
           
  1. 修改yml
server:
  port: 3344
spring:
  application:
    name: cloud-config-center
  cloud:
    config:
      server:
        git:
          uri: https://gitee.com/aqiang9/cloud2020-config.git
          search-paths:
            - cloud2020-config

      # 讀取的分支
      label: master
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest
    
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://eureka7001.com:7001/eureka
  instance:
    instance-id: config-center
    prefer-ip-address: true
management:
  endpoints:
    web:
      exposure:  # 
        include: "bus-refresh"      
           

二: :server端添加消息支援

  1. pom.xml (同配置中心)
  2. yml配置檔案(添加)
spring:
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest
           

(拷貝一個3355 為 3366 , 兩個配置基本相同)

三: 測試

  • 修改 git總的配置檔案
  • 重新整理 配置中心: curl -X POST ”http://127.0.0.1:3344/actuator/bus-refresh“
  • 一次發送,處處生效

SpringCloud Bus 動态屬性定點通知

簡單了解

  • 公式:

    http://127.0.0.1:配置中心端口/actuator/bus-refresh/{destination}

  • /bus/refresh

    請求不在發送到具體的服務執行個體上,而是發送給

    config server

    通過

    destination

    參數指定需要

    更新配置的服務或執行個體

  • destination 為 :

    spring.application.name

    :

    server.port

    總結:
    springcloud----消息總線--Bus概述使用RabbitMQ搭建消息總線

繼續閱讀