AVt天堂网 手机版,亚洲va久久久噜噜噜久久4399,天天综合亚洲色在线精品,亚洲一级Av无码毛片久久精品

當前位置:首頁 > 科技  > 軟件

8000字+22張圖探秘SpringCloud配置中心的核心原理

來源: 責編: 時間:2023-10-17 09:38:54 559觀看
導讀大家好,我是三友~~這篇文章來扒一扒SpringCloud配置中心的核心原理。不知你是否跟我一樣,在剛開始使用SpringCloud配置中心的時候也有很多的疑惑:SpringCloud是什么時候去拉取配置中心的?配置中心客戶端的配置信息為什么

大家好,我是三友~~Zuy28資訊網——每日最新資訊28at.com

這篇文章來扒一扒SpringCloud配置中心的核心原理。Zuy28資訊網——每日最新資訊28at.com

不知你是否跟我一樣,在剛開始使用SpringCloud配置中心的時候也有很多的疑惑:Zuy28資訊網——每日最新資訊28at.com

  • SpringCloud是什么時候去拉取配置中心的?
  • 配置中心客戶端的配置信息為什么要寫在bootstrap文件中?
  • 對象中注入的屬性是如何動態刷新的?
  • 一些開源的配置中心是如何整合SpringCloud的?
  • ...

本文就通過探討上述問題來探秘SpringCloud配置中心核心的底層原理。Zuy28資訊網——每日最新資訊28at.com

從SpringBoot的啟動過程說起

在SpringBoot啟動的時候會經歷一系列步驟,核心就是SpringApplication的run方法的邏輯Zuy28資訊網——每日最新資訊28at.com

圖片圖片Zuy28資訊網——每日最新資訊28at.com

整個過程大致可以劃分為三個階段:Zuy28資訊網——每日最新資訊28at.com

圖片圖片Zuy28資訊網——每日最新資訊28at.com

ApplicationContext刷新前階段,這個階段主要也干三件事Zuy28資訊網——每日最新資訊28at.com

  • 準備Environment(注意我這里加粗了,你懂得),也就是準備SpringBoot的整個外部化配置的對象
  • 創建一個ApplicationContext
  • 為ApplicationContext做一些準備工作

圖片圖片Zuy28資訊網——每日最新資訊28at.com

ApplicationContext刷新階段,這個階段其實就是調用ApplicationContext#refresh方法來刷新容器Zuy28資訊網——每日最新資訊28at.com

圖片圖片Zuy28資訊網——每日最新資訊28at.com

刷新的整個過程可以看我之前寫的萬字+20張圖剖析Spring啟動時12個核心步驟這篇文章Zuy28資訊網——每日最新資訊28at.com

ApplicationContext刷新后階段,這個階段其實就是收尾的階段,這個過程其實沒有什么非常核心的事Zuy28資訊網——每日最新資訊28at.com

ok,在說完上面這三個階段之后,思考一個問題Zuy28資訊網——每日最新資訊28at.com

你覺得在上面的三個階段,哪個階段最有可能從配置中心拉取配置?Zuy28資訊網——每日最新資訊28at.com

其實稍微思考一下,肯定是想到的就是刷新前階段Zuy28資訊網——每日最新資訊28at.com

因為我已經明示了,準備EnvironmentZuy28資訊網——每日最新資訊28at.com

玩笑歸玩笑,為什么是這個階段?Zuy28資訊網——每日最新資訊28at.com

很好理解,因為這個階段是準備Environment,也就是準備外部化配置Zuy28資訊網——每日最新資訊28at.com

只需要在這個階段加載配置中心的配置,放到Environment中,后面在整個ApplicationContext刷新階段創建Bean的時候,就可以使用到配置中心的配置了Zuy28資訊網——每日最新資訊28at.com

其實不光是配置中心的配置,比如配置文件的配置,也是在這里階段讀取的Zuy28資訊網——每日最新資訊28at.com

至于如何實現的,我們接著往下瞅Zuy28資訊網——每日最新資訊28at.com

準備Environment的核心操作

上一節得出一個結論Zuy28資訊網——每日最新資訊28at.com

準備Environment,也就是prepareEnvironment方法的實現,是拉取配置的核心Zuy28資訊網——每日最新資訊28at.com

prepareEnvironment方法prepareEnvironment方法Zuy28資訊網——每日最新資訊28at.com

不過在說這個方法之前,先來講一下一些前置操作Zuy28資訊網——每日最新資訊28at.com

前置操作

在SpringApplication創建的時候,會去加載spring.factories中的一些對象,其中就包括:Zuy28資訊網——每日最新資訊28at.com

  • org.springframework.context.ApplicationListener鍵對應的ApplicationListener的實現

圖片Zuy28資訊網——每日最新資訊28at.com

  • org.springframework.boot.SpringApplicationRunListener鍵對應的SpringApplicationRunListener的實現類

圖片Zuy28資訊網——每日最新資訊28at.com

SpringApplicationRunListener僅僅只有一個實現EventPublishingRunListenerZuy28資訊網——每日最新資訊28at.com

EventPublishingRunListener

構造的時候會創建一個SimpleApplicationEventMulticaster,再將加載的ApplicationListener添加進去Zuy28資訊網——每日最新資訊28at.com

SimpleApplicationEventMulticaster是用來發布事件用的,不清楚的話可以看三萬字盤點Spring 9大核心基礎功能這篇文章Zuy28資訊網——每日最新資訊28at.com

按照傳統,畫張圖來理一下這部分前置操作Zuy28資訊網——每日最新資訊28at.com

圖片圖片Zuy28資訊網——每日最新資訊28at.com

prepareEnvironment的核心邏輯

接著來講一下prepareEnvironment方法Zuy28資訊網——每日最新資訊28at.com

prepareEnvironment方法prepareEnvironment方法Zuy28資訊網——每日最新資訊28at.com

這個方法會首先創建一個Environment對象Zuy28資訊網——每日最新資訊28at.com

之后會執行這么一行方法,傳入剛剛創建的Environment對象Zuy28資訊網——每日最新資訊28at.com

listeners.environmentPrepared(environment);

這個方法最終會走到這個方法

EventPublishingRunListener#environmentPrepared

圖片圖片Zuy28資訊網——每日最新資訊28at.com

這個方法最終會發布一個ApplicationEnvironmentPreparedEvent事件Zuy28資訊網——每日最新資訊28at.com

而對這個事件有兩個特別重要的監聽器:Zuy28資訊網——每日最新資訊28at.com

  • ConfigFileApplicationListener
  • BootstrapApplicationListener

這些監聽器都是通過前置操作從spring.factories配置文件中加載的Zuy28資訊網——每日最新資訊28at.com

ConfigFileApplicationListener,用來處理配置文件的,他會解析配置文件的配置,放到Environment中Zuy28資訊網——每日最新資訊28at.com

BootstrapApplicationListener這個跟本文探討的主題相關了,它是用來專門來跟配置中心交互的Zuy28資訊網——每日最新資訊28at.com

到這,我們就找到了SpringCloud配置中心配置拉取的整個入口邏輯Zuy28資訊網——每日最新資訊28at.com

不過在分析BootstrapApplicationListener是如何從配置中心拉取配置的之前,先來張圖總結一下這部分prepareEnvironment的操作Zuy28資訊網——每日最新資訊28at.com

圖片圖片Zuy28資訊網——每日最新資訊28at.com

SpringCloud是如何巧妙地拉取配置的?

在BootstrapApplicationListener中,他首先也會創建一個SpringApplication去執行Zuy28資訊網——每日最新資訊28at.com

圖片圖片Zuy28資訊網——每日最新資訊28at.com

其實本質上就是創建一個Spring容器,也就是ApplicationContextZuy28資訊網——每日最新資訊28at.com

這個容器非常重要,這個容器是專門用來跟配置中心交互的Zuy28資訊網——每日最新資訊28at.com

這個容器在創建的時候會給它兩個比較重要的配置Zuy28資訊網——每日最新資訊28at.com

第一個就是設置這個容器所用的配置文件的名稱Zuy28資訊網——每日最新資訊28at.com

圖片圖片Zuy28資訊網——每日最新資訊28at.com

默認就是bootstrapZuy28資訊網——每日最新資訊28at.com

這就解釋了為什么配置中心的配置信息需要寫在bootstrap配置文件中Zuy28資訊網——每日最新資訊28at.com

第二個就是會加入一個配置類Zuy28資訊網——每日最新資訊28at.com

BootstrapImportSelectorConfiguration

圖片圖片Zuy28資訊網——每日最新資訊28at.com

這個配置類又會通過@Import注解導入另一個配置類Zuy28資訊網——每日最新資訊28at.com

BootstrapImportSelector

圖片圖片Zuy28資訊網——每日最新資訊28at.com

BootstrapImportSelector實現了(間接)ImportSelector接口Zuy28資訊網——每日最新資訊28at.com

那么這個容器在啟動的時候,就會調用BootstrapImportSelector的selectImports方法的實現獲取到一些配置類Zuy28資訊網——每日最新資訊28at.com

而BootstrapImportSelector的selectImports實現從截圖中也就可以看出Zuy28資訊網——每日最新資訊28at.com

他會加載所有的spring.factories中的鍵為org.springframework.cloud.bootstrap.BootstrapConfiguration的配置類Zuy28資訊網——每日最新資訊28at.com

其實這里@BootstrapConfiguration的作用其實跟@EnableAutoConfiguration的作用是差不多的,都是用來導入配置類的Zuy28資訊網——每日最新資訊28at.com

所以,總的來說,這個用來跟配置中心交互的Spring容器最最主要就是干兩件事:Zuy28資訊網——每日最新資訊28at.com

  • 加載bootstrap配置文件
  • 加載所有的spring.factories中的鍵為org.springframework.cloud.bootstrap.BootstrapConfiguration對應的配置類

圖片圖片Zuy28資訊網——每日最新資訊28at.com

而在spring-cloud-context包下,@BootstrapConfiguration會導入一個很重要的配置類Zuy28資訊網——每日最新資訊28at.com

圖片圖片Zuy28資訊網——每日最新資訊28at.com

PropertySourceBootstrapConfiguration

圖片圖片Zuy28資訊網——每日最新資訊28at.com

PropertySourceBootstrapConfiguration

這個配置類中會注入這么一個集合對象Zuy28資訊網——每日最新資訊28at.com

PropertySourceLocator

PropertySourceLocatorPropertySourceLocatorZuy28資訊網——每日最新資訊28at.com

這個接口非常非常重要,先來看看注釋Zuy28資訊網——每日最新資訊28at.com

Strategy for locating (possibly remote) property sources for the Environment. Implementations should not fail unless they intend to prevent the application from starting.Zuy28資訊網——每日最新資訊28at.com

我用我的四級英語功力給大家翻譯一下Zuy28資訊網——每日最新資訊28at.com

以一種策略的方式為Environment定位(可能是遠程)屬性配置(PropertySource)。實現不應該失敗,除非打算阻止應用程序啟動。Zuy28資訊網——每日最新資訊28at.com

從這個翻譯后的意思就是說,這個接口是用來定位,也就是說獲取屬性配置的Zuy28資訊網——每日最新資訊28at.com

并且可能是遠程告訴我們一個很重要的信息,那就是獲取的配置信息不僅僅可以存在本地,而且還可以存在遠程。Zuy28資訊網——每日最新資訊28at.com

遠程?作者這里就差直接告訴你可以從配置中心獲取了。。Zuy28資訊網——每日最新資訊28at.com

所以這個接口的作用就是用配置中心獲取配置的!Zuy28資訊網——每日最新資訊28at.com

那么自然而然不同的配置中心要想整合到SpringCloud就得實現這個接口Zuy28資訊網——每日最新資訊28at.com

當注入完PropertySourceLocator集合之后,在某個階段會調用所有的PropertySourceLocator,獲取配置中心中的配置圖片Zuy28資訊網——每日最新資訊28at.com

之后在把這些配置放到Environment中Zuy28資訊網——每日最新資訊28at.com

這樣在ApplicationContext的刷新階段就可以使用到配置中心的那些配置了Zuy28資訊網——每日最新資訊28at.com

小總結

到這我們就弄明白了在項目啟動中加載配置中心的配置了Zuy28資訊網——每日最新資訊28at.com

其實就是項目在啟動時會額外創建一個跟配置中心相關的Spring容器Zuy28資訊網——每日最新資訊28at.com

這個容器會去加載bootstrap配置文件和所有的spring.factories中的鍵為org.springframework.cloud.bootstrap.BootstrapConfiguration對應的配置類Zuy28資訊網——每日最新資訊28at.com

之后會去調用這個容器中所有的PropertySourceLocator對象,從配置中心獲取配置Zuy28資訊網——每日最新資訊28at.com

再放到Environment中就完成了啟動時從配置中心獲取配置的方式Zuy28資訊網——每日最新資訊28at.com

最后,來張全家福概括一下前面整體的步驟Zuy28資訊網——每日最新資訊28at.com

圖片圖片Zuy28資訊網——每日最新資訊28at.com

如何動態刷新Bean的屬性?

我們都知道,要想實現配置屬性的動態刷新,需要在類上加上一個注解Zuy28資訊網——每日最新資訊28at.com

@RefreshScopeZuy28資訊網——每日最新資訊28at.com

圖片圖片Zuy28資訊網——每日最新資訊28at.com

重點來了Zuy28資訊網——每日最新資訊28at.com

加了@RefreshScope注解的Bean,就拿上圖中的UserService舉例Zuy28資訊網——每日最新資訊28at.com

Spring在生成的時候會生成兩個UserService的Bean:Zuy28資訊網——每日最新資訊28at.com

  • 第一個是UserService的代理動態代理的Bean,后面我稱為第一個Bean
  • 第二個就是UserService這個Bean,后面我稱為第二個Bean

當你在其它類中需要注入一個UserService時,真正注入的是第一個Bean,也就是動態代理的BeanZuy28資訊網——每日最新資訊28at.com

當你使用這個注入的動態代理的Bean的時候,他會去找第二個Bean,也就是真正的UserService這個Bean,然后調用對應的方法Zuy28資訊網——每日最新資訊28at.com

圖片圖片Zuy28資訊網——每日最新資訊28at.com

比如你調用注入的UserService代理對象的getUsername方法,最終就會調用到第二個BeangetUsername方法Zuy28資訊網——每日最新資訊28at.com

獲取到的username屬性值自然也就是第二個Bean中的username值Zuy28資訊網——每日最新資訊28at.com

那么為什么要生成兩個Bean?Zuy28資訊網——每日最新資訊28at.com

接著往下瞅Zuy28資訊網——每日最新資訊28at.com

在SpringCloud中有這么一項規定Zuy28資訊網——每日最新資訊28at.com

當配置中心客戶端一旦感知到服務端的某個配置有變化的時候,需要發布一個RefreshEvent事件來告訴SpringCloud配置有變動Zuy28資訊網——每日最新資訊28at.com

圖片圖片Zuy28資訊網——每日最新資訊28at.com

在SpringCloud中RefreshEventListener類會去監聽這個事件Zuy28資訊網——每日最新資訊28at.com

RefreshEventListenerRefreshEventListenerZuy28資訊網——每日最新資訊28at.com

一旦監聽到這個事件,SpringCloud會再次從配置中心拉取配置Zuy28資訊網——每日最新資訊28at.com

這個拉取配置的核心邏輯跟啟動時拉取配置的核心邏輯是一樣的Zuy28資訊網——每日最新資訊28at.com

也是通過 BootstrapApplicationListener 來實現的Zuy28資訊網——每日最新資訊28at.com

圖片圖片Zuy28資訊網——每日最新資訊28at.com

這部分代碼邏輯在ContextRefresher類中,順著RefreshEventListener就能看到,有興趣可以扒一扒Zuy28資訊網——每日最新資訊28at.com

怕你忘了,我再把上面拉取配置的圖拿過來Zuy28資訊網——每日最新資訊28at.com

圖片圖片Zuy28資訊網——每日最新資訊28at.com

有了最新的配置之后,就會進行一步騷操作來移花接木”刷新“注入到對象的屬性Zuy28資訊網——每日最新資訊28at.com

這個騷操作就是銷毀所有的前面提到的第二個Bean,但是第一個Bean,也就是代理對象保持不變Zuy28資訊網——每日最新資訊28at.com

圖片圖片Zuy28資訊網——每日最新資訊28at.com

當程序運行調用代理對象的方法的時候,發現第二個Bean沒有了,此時他就會去重新創建第二個Bean,也就是重新創建一個UserService對象Zuy28資訊網——每日最新資訊28at.com

由于此時已經拉到最新的配置了,也就是這個被重新創建的UserService對象注入的就是最新的屬性了Zuy28資訊網——每日最新資訊28at.com

圖片圖片Zuy28資訊網——每日最新資訊28at.com

之后再調用的這個新創建的第二個Bean,拿到的自然就是最新的配置Zuy28資訊網——每日最新資訊28at.com

所以,給你的感覺是對象的屬性發生了變化,實際上是真正被調用的對象重新創建了Zuy28資訊網——每日最新資訊28at.com

所以這招移花接木還是有點意思的!Zuy28資訊網——每日最新資訊28at.com

小總結

其實到這就弄明白了Bean的屬性動態刷新的原理Zuy28資訊網——每日最新資訊28at.com

其實就是當配置中心客戶端發現服務端的配置有變化,需要發送一個RefreshEvent事件來告訴SpringCloud配置有變動Zuy28資訊網——每日最新資訊28at.com

SpringCloud會去監聽這個事件,按照項目啟動的方式重新拉取配置中心最新的屬性配置Zuy28資訊網——每日最新資訊28at.com

當拉取完屬性配置之后,就會銷毀所有的第二個Bean,也就是真正被使用的BeanZuy28資訊網——每日最新資訊28at.com

之后當第一個Bean(動態代理的Bean)需要使用這個第二個Bean時,就會重新創建這個第二個BeanZuy28資訊網——每日最新資訊28at.com

此時由于已經有最新的配置了,那么創建的這個第二個Bean就會被注入最新的屬性,這樣就實現了屬性的”刷新“Zuy28資訊網——每日最新資訊28at.com

圖片圖片Zuy28資訊網——每日最新資訊28at.com

補充個東西:@RefreshScope的秘密

上面大致說了@RefreshScope動態刷新的原理Zuy28資訊網——每日最新資訊28at.com

這里我補充一下@RefreshScope代碼層面的實現原理Zuy28資訊網——每日最新資訊28at.com

本來這部分原理我是寫在前面的,但是我發現這塊比較繞,怕打斷文章的節奏,所以就準備刪除了Zuy28資訊網——每日最新資訊28at.com

但是想想既然都寫了,那么就給放到補充里面吧,看不懂也不耽誤前面的理解Zuy28資訊網——每日最新資訊28at.com

圖片圖片Zuy28資訊網——每日最新資訊28at.com

這個注解是個衍生注解,真正起作用的就是@Scope注解Zuy28資訊網——每日最新資訊28at.com

@Scope注解并不陌生,他其實是定義Bean的作用域Zuy28資訊網——每日最新資訊28at.com

比如多例(原型),就可以加上@Scope("prototype")注解Zuy28資訊網——每日最新資訊28at.com

還有一些八股文常背的作用域,比如session作用域等等Zuy28資訊網——每日最新資訊28at.com

而@RefreshScope也可以看做是一種Bean的作用域,名字叫做refreshZuy28資訊網——每日最新資訊28at.com

這些除了單例和多例之外的作用域的底層實現邏輯都是一樣的Zuy28資訊網——每日最新資訊28at.com

這些帶有作用域的Bean相比于普通的單例Bean主要有以下幾點不同:Zuy28資訊網——每日最新資訊28at.com

  • 會注冊兩個Bean,這個前面已經提到過
  • 保存的地方不同,比如單例Bean最終會存在三級緩存中的第一級緩存中,而不同作用域的Bean是存在不同的地方的

先說會注冊兩個Bean,還是以前面提到的UserService舉個例子,這兩個Bean分別是Zuy28資訊網——每日最新資訊28at.com

  • 第一個Bean的Bean名稱為userService,Bean class為ScopedProxyFactoryBean.class,這個scope為默認,也就是單例
  • 第二個Bean的Bean名稱為scopedTarget.userService,Bean class為UserService.class,scope為refresh(如果是session作用域就是session)

第一個Bean的class為ScopedProxyFactoryBean,是個FactoryBean的實現Zuy28資訊網——每日最新資訊28at.com

圖片圖片Zuy28資訊網——每日最新資訊28at.com

這個最終會生成一個代理對象,上面的例子就是為UserService生成一個代理對象,并且由于是單例的,所以最終這個對象會被放到一級緩存中,我們使用時注入的也就是這個對象Zuy28資訊網——每日最新資訊28at.com

第二個Bean的class是UserService,所以生成的就是真正的UserService對象,但是由于scope為refresh,所以不會存在第一級緩存中Zuy28資訊網——每日最新資訊28at.com

這部分注冊兩個Bean的代碼是在ScopedProxyUtils#createScopedProxy方法中,有興趣的可以扒扒Zuy28資訊網——每日最新資訊28at.com

再來講一講保存的地方不同Zuy28資訊網——每日最新資訊28at.com

不同的作用域都需要實現一個Scope接口來存放對應的BeanZuy28資訊網——每日最新資訊28at.com

圖片圖片Zuy28資訊網——每日最新資訊28at.com

比如refresh、session作用域都有對應的實現Zuy28資訊網——每日最新資訊28at.com

圖片圖片Zuy28資訊網——每日最新資訊28at.com

也就是通過Scope就可以管理不同作用域的BeanZuy28資訊網——每日最新資訊28at.com

所以,對于refresh這個作用域來說,他的所有的Bean都在RefreshScope中Zuy28資訊網——每日最新資訊28at.com

后面說的銷毀,只需要移除RefreshScope中的Bean就可以了Zuy28資訊網——每日最新資訊28at.com

圖片圖片Zuy28資訊網——每日最新資訊28at.com

代碼也在ContextRefresher類中

開源配置中心是如何整合SpringCloud的?

首先我們再來梳理一下拉取配置和刷新配置的核心關鍵點Zuy28資訊網——每日最新資訊28at.com

拉取配置關鍵點就是項目啟動的時候(也包括重新拉取配置),會去創建一個容器Zuy28資訊網——每日最新資訊28at.com

這個容器只讀取bootstrap配置文件和spring.factories中的鍵為org.springframework.cloud.bootstrap.BootstrapConfiguration對應的配置類Zuy28資訊網——每日最新資訊28at.com

之后會獲取這個容器中的PropertySourceLocator,從而獲取配置中心的配置Zuy28資訊網——每日最新資訊28at.com

刷新配置關鍵點就是一旦配置中心配置變動,就需要發送RefreshEvent事件,之后一系列刷新操作都是由SpringCloud的來完成的Zuy28資訊網——每日最新資訊28at.com

所以,配置中心整合到SpringCloud其實就很簡單,就兩點Zuy28資訊網——每日最新資訊28at.com

第一點就是需要實現PropertySourceLocator,并且配置中心一些相關的Bean需要通過org.springframework.cloud.bootstrap.BootstrapConfiguration來裝配到這個容器中Zuy28資訊網——每日最新資訊28at.com

第二點,當配置發生變更需要發送RefreshEvent事件,這部分配置中心一些相關的Bean配置肯定是需要通過自動裝配來完成Zuy28資訊網——每日最新資訊28at.com

有了這兩點我們來看看Nacos作為配置中心是如何整合到SpringCloud的Zuy28資訊網——每日最新資訊28at.com

我們直接看Nacos的spring.factories文件Zuy28資訊網——每日最新資訊28at.com

圖片圖片Zuy28資訊網——每日最新資訊28at.com

NacosConfigBootstrapConfiguration是用來實現第一點的Zuy28資訊網——每日最新資訊28at.com

圖片圖片Zuy28資訊網——每日最新資訊28at.com

除了Nacos自己的一些Bean,他還聲明了一個NacosPropertySourceLocator這個BeanZuy28資訊網——每日最新資訊28at.com

NacosPropertySourceLocatorNacosPropertySourceLocatorZuy28資訊網——每日最新資訊28at.com

這個Bean就實現了PropertySourceLocator接口Zuy28資訊網——每日最新資訊28at.com

第二點的實現就是通過NacosConfigAutoConfiguration配置類來實現的Zuy28資訊網——每日最新資訊28at.com

這里面有這么一個BeanZuy28資訊網——每日最新資訊28at.com

圖片圖片Zuy28資訊網——每日最新資訊28at.com

這個Bean就實現了配置變化發送事件的操作Zuy28資訊網——每日最新資訊28at.com

圖片圖片Zuy28資訊網——每日最新資訊28at.com

除了Nacos,比如說Consul作為配置中心的時候也是這么一套實現邏輯Zuy28資訊網——每日最新資訊28at.com

但是值的注意的是,像Apollo配置中心,他并沒有適配SpringCloud這套規范Zuy28資訊網——每日最新資訊28at.com

當然,如果你有興趣,可以自己實現Apollo適配SpringCloud這套規范Zuy28資訊網——每日最新資訊28at.com


Zuy28資訊網——每日最新資訊28at.com

本文鏈接:http://www.tebozhan.com/showinfo-26-13640-0.html8000字+22張圖探秘SpringCloud配置中心的核心原理

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 掌握這五種多線程方法,提高Java代碼效率

下一篇: 從0手寫一個多線程日志包

標簽:
  • 熱門焦點
  • 直屏旗艦來了 iQOO 12和K70 Pro同臺競技

    旗艦機基本上使用的都是雙曲面屏幕,這就讓很多喜歡直屏的愛好者在苦等一款直屏旗艦,這次,你們等到了。據博主數碼閑聊站帶來的最新爆料稱,Redmi下代旗艦K70 Pro和iQOO 12兩款手
  • 19個 JavaScript 單行代碼技巧,讓你看起來像個專業人士

    今天這篇文章跟大家分享18個JS單行代碼,你只需花幾分鐘時間,即可幫助您了解一些您可能不知道的 JS 知識,如果您已經知道了,就當作復習一下,古人云,溫故而知新嘛。現在,我們就開始今
  • 三分鐘白話RocketMQ系列—— 如何發送消息

    我們知道RocketMQ主要分為消息 生產、存儲(消息堆積)、消費 三大塊領域。那接下來,我們白話一下,RocketMQ是如何發送消息的,揭秘消息生產全過程。注意,如果白話中不小心提到相關代
  • 一個注解實現接口冪等,這樣才優雅!

    場景碼猿慢病云管理系統中其實高并發的場景不是很多,沒有必要每個接口都去考慮并發高的場景,比如添加住院患者的這個接口,具體的業務代碼就不貼了,業務偽代碼如下:圖片上述代碼有
  • 慕巖炮轟抖音,百合網今何在?

    來源:價值研究所 作者:Hernanderz“難道就因為自己的一個產品牛逼了,從客服到總裁,都不愿意正視自己產品和運營上的問題,選擇逃避了嗎?”這一番話,出自百合網聯合創
  • 大廠卷向扁平化

    來源:新熵作者丨南枝 編輯丨月見大廠職級不香了。俗話說,兵無常勢,水無常形,互聯網企業調整職級體系并不稀奇。7月13日,淘寶天貓集團啟動了近年來最大的人力制度改革,目前已形成一
  • 重估百度丨大模型,能撐起百度的“今天”嗎?

    自象限原創 作者|程心 羅輯2023年之前,對于自己的“今天”,百度也很迷茫。“新業務到 2022 年底還是 0,希望 2023 年出來一個 1。”這是2022年底,李彥宏
  • iQOO Neo8 Pro評測:旗艦雙芯加持 最強性能游戲旗艦

    【Techweb評測】去年10月,iQOO推出了一款Neo7手機,該機搭載了聯發科天璣9000+,配備獨顯芯片Pro+,帶來了同價位段最佳的游戲體驗,一經上市便受到了諸多用
  • DRAM存儲器10月價格下跌,NAND閃存本月價格與上月持平

    10月30日,據韓國媒體消息,自今年年初以來一直在上漲的 DRAM 存儲器的交易價格僅在本月就下跌了近 10%,此次是全年首次降價,而NAND 閃存本月價格與上月持平。市
Top