欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Springcloud Bus消息總線原理是實現(xiàn)詳解

 更新時間:2022年09月14日 11:24:58   作者:扎哇太棗糕  
Spring Cloud Bus 使用輕量級的消息代理來連接微服務(wù)架構(gòu)中的各個服務(wù),可以將其用于廣播狀態(tài)更改(例如配置中心配置更改)或其他管理指令,本文將對其用法進行詳細介紹

springcloud Bus

什么是springcloud Bus

  上一章的springcloud Bus是對分布式微服務(wù)的遠程配置,但是有一個遺留的問題就是,Config客戶端對遠程配置的刷新需要手動使用post請求來完成,這就使得Config客戶端動態(tài)刷新變得十分麻煩。于是消息總線springcloud Bus就是來解決這個問題的

什么是消息總線

  在微服務(wù)架構(gòu)的系統(tǒng)中,通常會使用輕量級的消息代理來構(gòu)建一個共用的消息主題,并讓系統(tǒng)中所有微服務(wù)實例都鏈接上來。由于該主題中產(chǎn)生的消息都會被所有實例監(jiān)聽和消費,所以稱它為消息總線。

Bus實現(xiàn)自動刷新的原理

  所有的Config客戶端都監(jiān)聽MQ中同一個topic(默認是SpringCloudBus)。當(dāng)一個服務(wù)刷新數(shù)據(jù)的時候,它會把這個信息放入到Topic中,這樣其他監(jiān)聽同一Topic的服務(wù)就能得到通知,然后去更新自身的配置。

  由于springcloud Bus支持兩種消息的代理(RabbitMQ和kafka),于是接下來的demo選擇使用RabbitMQ 3.7.14,其他的消息中間件Bus暫不支持

RabbitMQ的下載配置

Erlang

  第一步: 下載安裝Erlang,地址:傳送門,安裝除了自定義安裝路徑外,一路next即可

  第二步: 配置環(huán)境變量,新建一個環(huán)境變量命名為ERLANG_HOME,值為Erlang的安裝路徑

path環(huán)境中添加 %ERLANG_HOME%\bin

  第三步: win + R 輸入cmd回車,鍵入命令erl測試配置是否成功

RabbitMQ

  第一步: 這里以RabbitMQ 3.7.14為例,地址:傳送門,頁面的最下方有下載的地方,安裝除了自定義安裝路徑外,一路next即可

  第二步: 配置環(huán)境變量,新建一個環(huán)境變量命名為RABBITMQ_SERVER,值為RabbitMQ的安裝路徑

path環(huán)境中添加 %RABBITMQ_SERVER%\sbin

  第三步: 安裝管理工具RabbitMQ-Plugins,win + R 輸入cmd回車,鍵入命令

rabbitmq-plugins enable rabbitmq_management

  第四步: 第三部安裝的管理工具會安裝幾個RabbitMQ的管理快捷方式,可以點擊win鍵查看,點擊即可執(zhí)行對應(yīng)操作

  第五步: 測試是否安裝成功,瀏覽器http://localhost:15672(默認賬號:guest,密碼:guest),登入RabbitMQ的管理頁就表示已經(jīng)安裝成功

Bus動態(tài)刷新

  Bus動態(tài)刷新有兩種設(shè)計思想,第一種利用消息總線觸發(fā)一個客戶端的bus/refresh,從而刷新這條總線上的所有客戶端配置;第二種利用消息總線觸發(fā)一個服務(wù)端ConfigServer的bus/refresh,從而刷新這個配置中心(服務(wù)端)上注冊的所有客戶端配置。

  以上兩種思想并不是都有應(yīng)用,而是選擇了第二種,因為第一種設(shè)計思想會使得被選中的服務(wù)端節(jié)點在配置獲取職責(zé)之外新增配置刷新的職責(zé),這會打破微服務(wù)的職責(zé)單一性和各節(jié)點之間的對等性。且一旦被選中的節(jié)點失效,配置刷新也將會隨之失效,這條總線上的服務(wù)端依舊無法實時獲取到最新的配置。

全局廣播通知代碼實現(xiàn)

  此時配置相關(guān)微服務(wù)一共有三個,它們是配置中心服務(wù)端3344、客戶端3355、客戶端3366,全局廣播的代碼實現(xiàn)需要對三個微服務(wù)都進行配置

  配置中心3344: pom文件和配置文件

<!--添加消息總線RabbitMQ支持-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

spring:
    #rabbitmq相關(guān)配置
    rabbitmq:
      host: localhost
      port: 5672
      username: guest
      password: guest
##rabbitmq相關(guān)配置,暴露bus刷新配置的端點 SpringCloud Bus動態(tài)刷新全局廣播
management:
  endpoints: #暴露bus刷新配置的端點
    web:
      exposure:
        include: 'bus-refresh'

  客戶端3355、3366: pom文件和配置文件

<!--添加消息總線RabbitMQ支持-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

spring:
    #rabbitmq相關(guān)配置
    rabbitmq:
      host: localhost
      port: 5672
      username: guest
      password: guest

以3366為例,配置文件的縮進如下

server:
  port: 3366

spring:
  application:
    name: config-client
  cloud:
    config:
      uri: http://localhost:3344  #配置中心的地址
      label: master  #分支名稱
      name: config  #配置文件名稱
      profile: dev  #讀取后綴名稱   上述三個綜合http://localhost:3344/master/config-dev.yml
  #rabbitmq相關(guān)配置
  rabbitmq:
    host: localhost
    port: 5672
    username: guest
    password: guest
#服務(wù)注冊到eureka地址
eureka:
  client:
    service-url:
      #設(shè)置與eureka server交互的地址查詢服務(wù)和注冊服務(wù)都需要依賴這個地址
      defaultZone: http://localhost:7001/eureka #單機版

# 暴露監(jiān)控端點 否則 curl -X POST "http://localhost:3355/actuator/refresh" 不可使用
management:
  endpoints:
    web:
      exposure:
        include: "*"

  ??值得注意的是,之前rabbitmq的web訪問端口是15672,但是在代碼中連接rabbitmq使用的端口是5672,這里很容易踩坑

  完成前面的配置,使用以下鏈接訪問配置中心服務(wù)端3344、客戶端3355、客戶端3366的配置信息

http://localhost:3344/master/config-dev.yml
http://localhost:3355/configInfo
http://localhost:3366/configInfo

  然后修改gitee上的遠程配置,仍然使用上面鏈接訪問,會發(fā)現(xiàn)只有配置中心服務(wù)端獲取的配置是最新的,但是配置客戶端的配置還是修改前的,需要使用win+R輸入命令刷新,再訪問的話配置客戶端就是最新的配置了

curl -X POST "http://localhost:3344/actuator/bus-refresh"

定點通知代碼實現(xiàn)

  bus除了可以一個命令刷新總線上的所有微服務(wù)之外,還可以支持定點刷新,命令如下

定點通知一個

curl -X POST "http://localhost:3344/actuator/bus-refresh/config-client:3355"

定點通知多個

curl -X POST "http://localhost:3344/actuator/bus-refresh/{config-client:3355,config-client:3366}"

到此這篇關(guān)于Springcloud Bus消息總線原理是實現(xiàn)詳解的文章就介紹到這了,更多相關(guān)Springcloud Bus內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java8的Optional如何干掉空指針(示例詳解)

    Java8的Optional如何干掉空指針(示例詳解)

    這篇文章主要介紹了Java8的Optional如何干掉空指針,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-01-01
  • java編程實現(xiàn)基于UDP協(xié)議傳輸數(shù)據(jù)的方法

    java編程實現(xiàn)基于UDP協(xié)議傳輸數(shù)據(jù)的方法

    這篇文章主要介紹了java編程實現(xiàn)基于UDP協(xié)議傳輸數(shù)據(jù)的方法,較為詳細的分析了UDP協(xié)議的原理及Java編程實現(xiàn)數(shù)據(jù)傳輸客戶端與服務(wù)器端的相關(guān)技巧,需要的朋友可以參考下
    2015-11-11
  • 幾道java循環(huán)練習(xí)題(適合新人)

    幾道java循環(huán)練習(xí)題(適合新人)

    這篇文章主要給大家介紹了幾道java循環(huán)練習(xí)題,非常適合剛?cè)腴T的java新人,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • Java中Redis的布隆過濾器詳解

    Java中Redis的布隆過濾器詳解

    這篇文章主要介紹了Java中Redis的布隆過濾器詳解,我們經(jīng)常會把一部分?jǐn)?shù)據(jù)放在Redis等緩存,比如產(chǎn)品詳情,這樣有查詢請求進來,我們可以根據(jù)產(chǎn)品Id直接去緩存中取數(shù)據(jù),而不用讀取數(shù)據(jù)庫,這是提升性能最簡單,最普遍,也是最有效的做法,需要的朋友可以參考下
    2023-09-09
  • Spring?MVC?URL地址映射的示例代碼

    Spring?MVC?URL地址映射的示例代碼

    @RequestMapping是一個用來處理請求地址映射的注解,可用于類或方法上。用于類上,表示類中的所有響應(yīng)請求的方法都是以該地址作為父路徑。,這篇文章主要介紹了Spring?MVC?URL地址映射,需要的朋友可以參考下
    2022-07-07
  • Java日常練習(xí)題,每天進步一點點(2)

    Java日常練習(xí)題,每天進步一點點(2)

    下面小編就為大家?guī)硪黄狫ava基礎(chǔ)的幾道練習(xí)題(分享)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧,希望可以幫到你
    2021-07-07
  • 淺拷貝和深拷貝原理分析

    淺拷貝和深拷貝原理分析

    Java 對象拷貝是為對象賦值的一種方式,簡單來說就是創(chuàng)建一個和原對象相同的對象,新創(chuàng)建的對象是原對象的一個副本。面試官賊拉喜歡在面試的時候問一問你淺拷貝和深拷貝的原理
    2021-08-08
  • springboot3.x中Jakarta包無法引入的問題

    springboot3.x中Jakarta包無法引入的問題

    最近想將一些項目升級到springboot3.x和java17的時候,發(fā)現(xiàn)項目依賴中有Jakarta的包,但是代碼標(biāo)紅提示沒有相關(guān)的類,本文就來介紹一下解決方法,感興趣的可以了解一下
    2024-02-02
  • Micronaut框架的簡單使用介紹

    Micronaut框架的簡單使用介紹

    這篇文章主要介紹了Micronaut框架的簡單使用介紹,幫助大家更好的理解和學(xué)習(xí)使用Micronaut,感興趣的朋友可以了解下
    2021-04-04
  • 詳解Java中JSON數(shù)據(jù)的生成與解析

    詳解Java中JSON數(shù)據(jù)的生成與解析

    今天給大家?guī)淼氖顷P(guān)于Java的相關(guān)知識,文章圍繞著Java中JSON數(shù)據(jù)的生成與解析展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06

最新評論