最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

RabbitMQ消息總線方式刷新配置服務全過程

 更新時間:2025年07月17日 14:11:10   作者:小凱  ?  
Spring Cloud Bus通過消息總線與MQ實現(xiàn)微服務配置統(tǒng)一刷新,結合Git Webhooks自動觸發(fā)更新,避免手動重啟,提升效率與可靠性,適用于配置管理及全局信息同步場景

前言介紹

在微服務架構中,為了更方便的向微服務實例廣播消息,我們通常會構建一個消息中心,讓所有的服務實例都連接上來,而該消息中心所發(fā)布的消息都會被微服務實例監(jiān)聽和消費,我們把這種機制叫做消息總線(SpringCloud
Bus)

當我們的微服務達到是幾個到百個以上,在更新配置時,不太可能一個個刷新或者重啟,這樣既不能保證效率也容易導致遺漏造成事故。因此我們需要SpringCloud Bus 提供總線服務,在我們push代碼到Git的時候,通過Webhooks(http://localhost:port/actuator/bus-refresh/)執(zhí)行刷新,消息總線會通知各個實例更新配置,以達到自動更新全服務配置。

環(huán)境準備

  • jdk 1.8、idea2018、Maven3
  • Spring Boot 2.0.6.RELEASE
  • Spring Cloud Finchley.SR2

需要有一個Git帳號,用來創(chuàng)建配置中心以及開啟Webhooks服務,添加回調(diào)

RabbitMQ服務端環(huán)境安裝

  1. 下載Erlang;http://www.erlang.org/downloads {安裝后配置環(huán)境變量:D:\Program Files\erl10.5}
  2. 下載rabbitMQ;http://www.rabbitmq.com/download.html {安裝后CMD依次執(zhí)行}
  • cd D:\Program Files\RabbitMQ Server\rabbitmq_server-3.8.1\sbin
  • rabbitmq-plugins.bat enable rabbitmq_management
  • rabbitmq-service.bat stop
  • rabbitmq-service.bat start
  • 瀏覽器訪問;http://127.0.0.1:15672
  • 服務端口5672

代碼示例

itstack-demo-springcloud-07
├── itstack-demo-springcloud-config-client
│   └── src
│       └── main
│           ├── java
│           │   └── org.itstack.demo
│           │        ├── web
│           │        │   └── ConfigClientController.java      
│           │        └── ConfigClientApplication.java
│           └── resources   
│               ├── application.yml
│               └── bootstrap.yml
├── itstack-demo-springcloud-config-server
│   └── src
│       └── main
│           ├── java
│           │   └── org.itstack.demo   
│           │        └── ConfigServerApplication.java
│           └── resources   
│               └── application.yml
└── itstack-demo-springcloud-eureka-server
     └── src
        └── main
            ├── java
            │   └── org.itstack.demo   
            │        └── EurekaServerApplication.java
            └── resources   
                └── application.yml

itstack-demo-springcloud-config-client | 配置獲取客戶端方,提供自動刷新Http

web/ConfigClientController.java & 添加注解@RefreshScope自動刷新配置

@RestController
@RefreshScope
public class ConfigClientController {

    @Value("${info.profile:error}")
    private String profile;

    @GetMapping("/config")
    public Mono<String> config() {
        return Mono.justOrEmpty(profile);
    }

}

ConfigClientApplication.java & 普通配置即可

@SpringBootApplication
public class ConfigClientApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigClientApplication.class, args);
    }

}

application.yml & 需要配置endpoints,這樣才可以暴漏刷新服務

spring:
  application:
    name: itstack-demo-springcloud-config-client
  cloud:
    bus:
      trace:
        enabled: true
      enabled: true
server:
  port: 9001

# 如果不使用消息總線,則開啟如下配置 /actuator/refresh 這個 Endpoint 暴露出來
#management:
#  endpoints:
#    web:
#      exposure:
#        include: refresh

bootstrap.yml & 配置中心服務配置,http://localhost:7397 添加配置服務

spring:
  cloud:
    config:
      name: config-client         # 對應 {application} 部分,例如;config-client-dev = 只取最后一個符號'-'之前的
      profile: dev                # 對應 {profile} 部分
      label: master               # 對應 {label} 部分,即 Git 的分支。如果配置中心使用的是本地存儲,則該參數(shù)無用
      discovery:
        enabled: true             # 開啟 config 服務發(fā)現(xiàn)支持
        service-id: itstack-demo-springcloud-config-server        # 配置服務name

#配置文件會被轉換成 Web,訪問規(guī)則如下;
#/{application}/{profile}[/{label}]
#/{application}-{profile}.yml
#/{label}/{application}-{profile}.yml
#/{application}-{profile}.properties
#/{label}/{application}-{profile}.properties

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

itstack-demo-springcloud-config-server | 配置提供服務端方,鏈接Git配置工程地址

ConfigServerApplication.java & 添加注解@EnableConfigServer設置成配置服務中心

@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigServerApplication.class, args);
    }

}

application.yml & 配置信息,消息總線刷新

server:
  port: 8080

spring:
  application:
    name: itstack-demo-springcloud-config-server
  cloud:
    config:
      server:
        git:
          uri: https://github.com/fuzhengwei/itstack-demo-config  # 換成自己的配置Git倉庫的地址,如果沒有可以新建工程地址,也可以克隆我的;https://github.com/fuzhengwei/itstack-demo-config
          search-paths: config-repo                               # Git倉庫地址下的底層配置文件名稱,如果配置多個用逗號','分割。

# 如果配置中心需要訪問權限,則開啟配置
# spring.cloud.config.server.git.username:Github賬戶
# spring.cloud.config.server.git.password:Github密碼

eureka:
  client:
    service-url:
      defaultZone: http://localhost:7397/eureka/
management:
  endpoints:
    web:
      exposure:
        include: bus-refresh

itstack-demo-springcloud-eureka-server | 服務注冊發(fā)現(xiàn)

EurekaServerApplication.java & 添加注解@EnableEurekaServer啟動服務發(fā)現(xiàn)

@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {

    public static void main(String[] args) {
        SpringApplication.run( EurekaServerApplication.class, args );
    }

}

application.yml & 配置信息

server:
  port: 7397

eureka:
  instance:
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
    serviceUrl:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

spring:
  application:
    name: itstack-demo-springcloud-eureka-server

測試驗證

1.準備好自己Github的配置倉庫,也可以克隆我的Git;https://github.com/fuzhengwei/itstack-demo-config {有一組配置配置文件}

2.配置Webhooks,在https://github.com/換你自己的fuzhengwei/換你自己的itstack-demo-netty/settings/hooks/new

3.分別啟動服務

1.啟動RabbitMQ服務;http://127.0.0.1:15672/#/
2.itstack-demo-springcloud-eureka-server 服務注冊發(fā)現(xiàn)
3.itstack-demo-springcloud-config-server 配置Server
4.itstack-demo-springcloud-config-client 配置Client

4.訪問配置服務,端口7397;http://localhost:8080/config-client/dev

4.1.訪問結果

{
	"name": "config-client",
	"profiles": [
		"dev"
	],
	"label": null,
	"version": "ea0b1a1017595d542aa01b8b2bda68f9620dd81a",
	"state": null,
	"propertySources": [
		{
			"name": "https://github.com/fuzhengwei/itstack-demo-config/config-repo/config-client-dev.yml",
			"source": {
				"info.profile": "dev bus"
			}
		}
	]
}

4.2.訪問規(guī)則{配置文件會被轉換成 Web 接口,規(guī)則如下}

/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties

4.3.訪問配置文件;http://localhost:8080/config-client-dev.yml {可以直接訪問查看配置信息}

info: profile: dev bus

5.訪問使用配置的客戶端

5.1.訪問端口9001;http://localhost:9001/config

dev bus

5.2更改配置,POST請求刷新配置總線;http://localhost:8080/actuator/bus-refresh/ {如果配置Git的Webhooks則更新代碼自動刷新}

5.3訪問端口9001;http://localhost:9001/config

dev

總結

Spring Cloud Bus 可以更加方便的控制全局信息,用于統(tǒng)一刷新并通過MQ方式通過客戶端

如果你的內(nèi)網(wǎng)想進行Git的Webhooks配置,可以使用http://natapp.cn進行內(nèi)網(wǎng)穿透映射,他會給你提供免費外網(wǎng)調(diào)用服務

消息總線方式不只是應用于配置刷新,在一起同步信息請求中都可以使用,以及自己的項目架設上

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • java封裝空值建議使用Optional替代null的方法示例解析

    java封裝空值建議使用Optional替代null的方法示例解析

    這篇文章主要為大家介紹了java封裝空值建議使用Optional替代null的方法原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • 深入分析JAVA 多線程--interrupt()和線程終止方式

    深入分析JAVA 多線程--interrupt()和線程終止方式

    這篇文章主要介紹了JAVA 多線程--interrupt()和線程終止方式的的相關資料,文中代碼非常細致,幫助大家更好的理解和學習,感興趣的朋友可以了解下
    2020-06-06
  • IDEA2023.3.4開啟SpringBoot項目的熱部署(圖文)

    IDEA2023.3.4開啟SpringBoot項目的熱部署(圖文)

    本文使用的開發(fā)工具是idea,使用的是springboot框架開發(fā)的項目,配置熱部署,可以提高開發(fā)效率,文中通過圖文介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2024-02-02
  • 深入理解Spring事務的隔離級別

    深入理解Spring事務的隔離級別

    Spring 事務的隔離級別是一個重要的概念,它定義了事務之間的隔離程度,以防止并發(fā)問題(如臟讀、不可重復讀和幻讀),本文給大家介紹Spring事務的隔離級別,感興趣的朋友跟隨小編一起看看吧
    2025-11-11
  • 詳解如何將springboot項目導出成war包

    詳解如何將springboot項目導出成war包

    這篇文章主要介紹了詳解如何將springboot項目導出成war包,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • 詳解Java 中的UnitTest 和 PowerMock

    詳解Java 中的UnitTest 和 PowerMock

    這篇文章主要介紹了Java中的 UnitTest 和 PowerMock,文中講解非常詳細,對大家學習有很大的幫助,感興趣的朋友可以了解下
    2020-06-06
  • JVM的類加載器和雙親委派模式你了解嗎

    JVM的類加載器和雙親委派模式你了解嗎

    這篇文章主要為大家詳細介紹了JVM類加載器和雙親委派模式,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • 淺談HashMap在高并發(fā)下的問題

    淺談HashMap在高并發(fā)下的問題

    這篇文章主要介紹了HashMap在高并發(fā)下的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • java實現(xiàn)簡單猜數(shù)字游戲

    java實現(xiàn)簡單猜數(shù)字游戲

    這篇文章主要介紹了java實現(xiàn)簡單猜數(shù)字游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12
  • Java JMH測試與JMeter測試的區(qū)別及說明

    Java JMH測試與JMeter測試的區(qū)別及說明

    JMH專注微觀基準測試,測量Java代碼性能;JMeter用于宏觀性能測試,評估系統(tǒng)負載與壓力,兩者互補,JMH優(yōu)化關鍵代碼,JMeter驗證整體性能
    2025-08-08

最新評論

山西省| 泽州县| 华坪县| 唐河县| 涟水县| 兰考县| 玛多县| 洱源县| 麟游县| 剑阁县| 大化| 双峰县| 朝阳区| 邯郸市| 滕州市| 富蕴县| 上犹县| 毕节市| 治多县| 贡觉县| 琼中| 凉城县| 治县。| 丁青县| 庆城县| 新龙县| 大名县| 手机| 棋牌| 志丹县| 绿春县| 塔河县| 昌宁县| 长葛市| 丽水市| 乌审旗| 沾化县| 离岛区| 辉南县| 竹北市| 长沙县|