日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

[菜鸟SpringCloud实战入门]第七章:配置中心客户端主动刷新机制 + 配置中心服务化和高可用改造...

發布時間:2024/4/14 javascript 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [菜鸟SpringCloud实战入门]第七章:配置中心客户端主动刷新机制 + 配置中心服务化和高可用改造... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

歡迎來到菜鳥SpringCloud實戰入門系列(SpringCloudForNoob),該系列通過層層遞進的實戰視角,來一步步學習和理解SpringCloud。

本系列適合有一定Java以及SpringBoot基礎的同學閱讀。

每篇文章末尾都附有本文對應的Github源代碼,方便同學調試。

Github倉庫地址:

github.com/qqxx6661/sp…

菜鳥SpringCloud實戰入門系列

你可以通過以下兩種途徑查看菜鳥SpringCloud實戰入門系列

  • 關注我的公眾號:Rude3Knife 點擊公眾號下方:技術推文——SpringCloud
  • 菜鳥SpringCloud實戰入門專欄導航頁(CSDN)

前文回顧:

  • [菜鳥SpringCloud實戰入門]第一章:構建多模塊的Maven項目+創建注冊中心Eureka子模塊
  • [菜鳥SpringCloud實戰入門]第二章:創建服務提供者并在Eureka進行注冊
  • [菜鳥SpringCloud實戰入門]第三章:將Eureka改造為高可用集群
  • [菜鳥SpringCloud實戰入門]第四章:遠程調用服務實戰
  • [菜鳥SpringCloud實戰入門]第五章:熔斷器Hystrix的使用 + 可視化監控Hystrix Dashboard和Turbine
  • [菜鳥SpringCloud實戰入門]第六章:配置中心Spring Cloud Config初體驗
  • ...更多文章請查看上方:菜鳥SpringCloud入門實戰專欄導航頁

實戰版本

  • SpringBoot:2.0.3.RELEASE
  • SpringCloud:Finchley.RELEASE

-----正文開始-----

配置中心客戶端主動刷新機制 + 配置中心服務化和高可用改造

客戶端Refresh:客戶端主動獲取配置信息

經過上一章節配置好Spring Cloud Config后,客戶端(config-client模塊)能夠獲得從服務端(config-server模塊)傳來的配置文件信息。

文末寫出了一個問題,客戶端并不能獲取更新后的配置信息,想要刷新信息,必須重啟config-client模塊,這顯然不切實際。

實驗:驗證客戶端無法更新

下面做一個實驗,啟動客戶端和服務端,隨后更新dev配置文件,新加了(new):

隨后push到遠程倉庫,我們再次直接訪問服務端的 http://localhost:8769/spring-cloud-config-dev.properties :

發現更新成了新的配置文件。

之后訪問客戶端:

發現依然是老的配置文件信息,客戶端只在啟動時獲取了當時的配置文件信息。

開啟更新機制

我們只需要在config-server模塊中進行改動。

實現Refresh機制需要添加依賴spring-boot-starter-actuator,這個依賴在我們的root模塊中就已經添加,在config-server模塊就不需要重復添加了。如果你在root父模塊沒有添加,那么就需要加上。

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId> </dependency> 復制代碼

大坑:

對需要刷新的類加上注解@RefreshScope

當配置更改時,標有@RefreshScope的Bean將得到特殊處理來生效配置。

注意這里不是直接加載主類上,除非你的controller寫在了主類里。

import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;@RestController @RefreshScope public class HelloController {@Value("${config.hello}")private String hello;@RequestMapping("/hello")public String from() {return this.hello;} } 復制代碼

對于springboot 1.5.X 以上版本,需要在配置文件中關閉安全認證。

management.security.enabled=false 復制代碼

對于springboot 2,上述配置不起作用,需要修改server端配置文件,將端口暴露:

management:endpoints:web:exposure:include: "*" 復制代碼

還要將客戶端端口暴露:

management:endpoints:web:exposure:include: refresh 復制代碼

測試:

我們開啟服務端和客戶端,先測試下未更新前獲取的配置信息:

隨后我們修改配置文件并push:

然后以post請求訪問 curl -v -X POST "http://localhost:8002/actuator/refresh" :

得到了:

如果在不變更的情況下,再次發送POST請求:

使用Webhook監聽配置更新

WebHook是當某個事件發生時,通過發送http post請求的方式來通知信息接收方。Webhook來監測你在Github.com上的各種事件,最常見的莫過于push事件。如果你設置了一個監測push事件的Webhook,那么每當你的這個項目有了任何提交,這個Webhook都會被觸發,這時Github就會發送一個HTTP POST請求到你配置好的地址。

如此一來,你就可以通過這種方式去自動完成一些重復性工作,比如,你可以用Webhook來自動觸發一些持續集成(CI)工具的運作,比如Travis CI;又或者是通過 Webhook 去部署你的線上服務器。下圖就是github上面的webhook配置。

這種機制適用于只有少數微服務的情況,在大量未服務的情況下,這種機制就顯得捉襟見肘。

消息總線機制

如果項目少配置少的情況可以通過/refresh來手動刷新配置,如果項目比較復雜的情況呢這種肯定是行不通的,Spring Cloud Bus消息總線可以解決配置修改的真正的動態刷新。我們放在下一章進行學習。

配置中心服務化和高可用改造

目前我們的兩個子模塊config-server和config-client是相互耦合的,client需要輸入server的地址來調用它,這樣的調用違反了低耦合原則(低耦合:就是A模塊與B模塊存在依賴關系,那么當B發生改變時,A模塊仍然可以正常工作,那么就認為A與B是低耦合的。)

現在我們就是用之前學習的Eureka來對配置中心進行改造。

服務端改造

改造集中在兩方面,一個是在注冊中心注冊,一個是開啟多個服務端達到高可用的目的。

添加依賴(由于eureka的依賴在我們的父模塊已經添加,所以對于config-server模塊我們不需要改動):

<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency> </dependencies> 復制代碼

配置文件新增注冊配置:

server:port: 8769 spring:application:name: spring-cloud-config-servercloud:config:server:git:uri: https://xxxxxxxxxxx.git # 配置git倉庫的地址search-paths: config-repo # git倉庫地址下的相對地址,可以配置多個,用,分割。username: xxxxxx # git倉庫的賬號password: xxxxx # git倉庫的密碼 # 客戶端調用需要 management:endpoints:web:exposure:include: "*" eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/ 復制代碼

啟動類添加@EnableDiscoveryClient:

@SpringBootApplication @EnableConfigServer @EnableDiscoveryClient public class ConfigServerApplication {public static void main(String[] args) {SpringApplication.run(ConfigServerApplication.class, args);} } 復制代碼

客戶端改造

依賴修改:同服務端相同,我們不需要修改,父模塊將注冊中心等都已經引入(見第一章)

啟動類添加@EnableDiscoveryClient:同上。

import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@SpringBootApplication @EnableDiscoveryClient public class ConfigClientApplication {public static void main(String[] args) {SpringApplication.run(ConfigClientApplication.class, args);}} 復制代碼

配置文件yml修改:

在前面我們給config-client子模塊配置了兩個yml文件,一個是傳統application.yml一個是bootstrap.yml,bootstrap.yml的啟動優先于application.yml

我們修改bootstrap.yml,添加注冊中心配置,并將config的配置加上:

  • spring.cloud.config.discovery.enabled :開啟Config服務發現支持
  • spring.cloud.config.discovery.serviceId :指定server端的name,也就是server端spring.application.name的值
  • 刪除spring.cloud.config.uri
spring:cloud:config:name: spring-cloud-configprofile: devlabel: masterdiscovery:enabled: trueservice-id: spring-cloud-config-server eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/ 復制代碼

隨后我們啟動三個模塊:

  • Eureka子模塊
  • config-server
  • config-client

查看Eureka狀態 http://localhost:8761/ :

為了達成高可用,我們將config-server的端口號再修改為8770,啟動一個新的config-server,這樣就有兩個config-server同時為我們服務。

調用客戶端接口:

本章代碼

github.com/qqxx6661/sp…

參考

www.ityouknow.com/springcloud…

blog.csdn.net/youanyyou/a…

www.ityouknow.com/springcloud…

-----正文結束-----

菜鳥SpringCloud實戰入門專欄全導航:通過以下兩種途徑查看

  • 關注我的公眾號:Rude3Knife 點擊公眾號下方:技術推文——SpringCloud
  • 菜鳥SpringCloud實戰專欄(CSDN)

關注我

我是蠻三刀把刀,后端開發。主要關注后端開發,數據安全,爬蟲等方向。

來微信和我聊聊:yangzd1102

Github個人主頁:

github.com/qqxx6661

原創博客主要內容

  • Java知識點復習全手冊
  • Leetcode算法題解析
  • 劍指offer算法題解析
  • Python爬蟲相關技術實戰
  • 后端開發相關技術實戰
  • SpringCloud實戰

同步更新公眾號及以下全部博客:

1. Csdn

blog.csdn.net/qqxx6661

2. 知乎

www.zhihu.com/people/yang…

3. 掘金

juejin.im/user/5b4801…

4. 簡書

www.jianshu.com/u/b5f225ca2…

個人公眾號:Rude3Knife

如果文章對你有幫助,不妨收藏起來并轉發給您的朋友們~

總結

以上是生活随笔為你收集整理的[菜鸟SpringCloud实战入门]第七章:配置中心客户端主动刷新机制 + 配置中心服务化和高可用改造...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。