摘要:零為何要學源碼簡單,是我現(xiàn)在看起來最簡單的源碼不會像封裝了一層又一層,把人繞暈,而沒有那么多封裝,上手快,我們學習就應該從簡單的開始憑什么非要去學封的像粽子一樣的源碼,我們就是要去學簡簡單單,平時樸素,接地氣的源碼最接近業(yè)務代碼的源碼。
零 為何要學apollo源碼
1 簡單,Apollo是我現(xiàn)在看起來最"簡單"的源碼
不會像spring封裝了一層又一層,把人繞暈,而apollo沒有那么多封裝,上手快,我們學習就應該從簡單的開始,憑什么非要去學封的像粽子一樣的spring源碼,我們就是要去學簡簡單單,平時樸素,接地氣的源碼
2 最接近業(yè)務代碼的源碼。而且里面有大量的業(yè)務代碼,而我們其實平時寫的最多的就是業(yè)務,它向我們展示了大神是如何來寫業(yè)務的,如何來配置maven依賴,如何來處理異常,如何來輸入?yún)?shù)判斷
比如它的maven依賴層次結構
它使用不同的異常處理類
它對DTO,排序等的使用
@RequestMapping(value = "/apps/{appId}/envs/{env}/clusters/{clusterName}/namespaces/{namespaceName}/items", method = RequestMethod.GET) public ListfindItems(@PathVariable String appId, @PathVariable String env, @PathVariable String clusterName, @PathVariable String namespaceName, @RequestParam(defaultValue = "lineNum") String orderBy) { List items = configService.findItems(appId, Env.valueOf(env), clusterName, namespaceName); if ("lastModifiedTime".equals(orderBy)) { Collections.sort(items, (o1, o2) -> {
平凡而接地氣,讓我們有了學習的榜樣
當然也有比較"高端"的,比如servlet3.0中的DeferredResult用來保持長連接
@RequestMapping(method = RequestMethod.GET) public DeferredResult>> pollNotification(
自定義注解
@Import(ApolloConfigRegistrar.class) //用import注解來載入bean public @interface EnableApolloConfig { //用ImportBeanDefinitionRegistrar來注冊bean public class ApolloConfigRegistrar implements ImportBeanDefinitionRegistrar { @Override public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
學習知識總是從皮毛開始,學產(chǎn)品也是從產(chǎn)品功能開始,讓我們先來看下apollo的應用場景
一 應用場景(載至apollo官方git)
1 傳統(tǒng)開發(fā)小A是XX團隊主力開發(fā),有一天產(chǎn)品說要上線一個迪士尼門票內(nèi)購功能,由于迪士尼門票很火爆,產(chǎn)品一拍腦袋說,每個用戶限購5張!
代碼如下:
private static final int MAX_QTY_PER_USER = 5; //產(chǎn)品需求限購5張 if (qty > MAX_QTY_PER_USER ) { throw new IllegalStateException( String.format("每個用戶最多購買%d張!", MAX_QTY_PER_USER )); }
第二天中午,由于內(nèi)購實在太火爆,產(chǎn)品急匆匆的跑過來對小A說,趕緊改成每人1張!
小A只好放棄了午飯,改代碼、回歸測試、上線,整整花了1個小時才搞定。。。
小B是YY團隊主力開發(fā),有一天產(chǎn)品說要上線一個歡樂谷門票搶購功能,由于歡樂谷門票很火爆,產(chǎn)品一拍腦袋說,每個用戶限購5張!
小B吸取了小A的教訓,二話不說把配置寫在了Apollo配置中心
第二天中午,由于內(nèi)購實在太火爆,產(chǎn)品急匆匆的跑過來對小B說,趕緊改成每人1張!
小B不緊不慢的說:10秒內(nèi)搞定~
配置修改實時生效: 配置可以做到準實時生效,再也不用改配置文件重新發(fā)版了
可視化配置管理:配置的后臺管理系統(tǒng)
權限管理: 權限管理、發(fā)布審核、操作審計
環(huán)境管理: 統(tǒng)一不同環(huán)境、不同集群
版本管理: 版本管理、灰度發(fā)布
三 Apollo核心概念之namespace公共類型: 應用之間共享配置
私有類型:應用獨有的配置
關聯(lián)類型:應用繼承共享配置,并可覆蓋(類似于類的繼承)
四 搭建Apollo服務springboot接入非常簡單,只需在maven里面加個依賴,然后啟動類上加個@EnableApolloConfig就可以了,然后在配置項上使用@Value注解即可
搭建apollo服務還是要頗費一番功夫的,參考《apollo開發(fā)指南》
五 架構演進架構V1
文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/74799.html
摘要:我們是不是很好奇配置中心如何做到實時更新并且通知到客戶端的這也是一個面試中經(jīng)常會問到的題目??蛻舳说玫綘顟B(tài)碼是并且會根據(jù)立即去服務端拉取最新的配置。引言 記得我們那時候剛開始學習Java的時候都只是一個單體項目,項目里面的配置基本都是寫在項目里面的properties文件中,比如數(shù)據(jù)庫配置啥的,各種邏輯開關,一旦這些配置修改了,還需要重啟項目這修改才會生效。隨著各種微服務的誕生,服務的...
摘要:我們是不是很好奇配置中心如何做到實時更新并且通知到客戶端的這也是一個面試中經(jīng)常會問到的題目。雖然是攜程開源的,但是攜程內(nèi)部也不用它??蛻舳说玫綘顟B(tài)碼是并且會根據(jù)立即去服務端拉取最新的配置。通過定時任務的補充,可以讓配置達到最終的一致性。 引言記得我們那時候剛開始學習Java的時候都只是一個單體項目,項目里面的配...
摘要:比如使用的時候指定使用哪個環(huán)境的配置在微服務架構下,服務的數(shù)量會比之前的單體應用多,部署的節(jié)點數(shù)量也會很多。今天主要是講下在中如何對接進行配置管理。 問題背景 在實際工作中,我們的開發(fā)環(huán)境,測試環(huán)境,生產(chǎn)環(huán)境對應的 Mysql 數(shù)據(jù)庫,Redis 這些信息都不一樣,每個環(huán)境都有對應的一套配置,在 Spring Boot 中我們通常會編寫多個配置文件,也就是每個環(huán)境一個配置文件。 比如:...
摘要:不同與其它中間件框架,中有大量的業(yè)務代碼,它向我們展示了大神是如何寫業(yè)務代碼的依賴的層次結構,如何進行基礎包配置,以及工具類編寫,可以稱之為之最佳實踐。代碼參考視圖解析器,這里的配置指的是不檢查頭,而且默認請求為格式。 不同與其它中間件框架,Apollo中有大量的業(yè)務代碼,它向我們展示了大神是如何寫業(yè)務代碼的:maven依賴的層次結構,如何進行基礎包配置,以及工具類編寫,可以稱之為sp...
摘要:分鐘學是一個系列,簡單暴力,包學包會。接管了請求和狀態(tài)管理。一般在生產(chǎn)環(huán)境中,我們通常還希望做權限驗證請求攔截等事務處理。 21 分鐘學 apollo-client 是一個系列,簡單暴力,包學包會。 搭建 Apollo client 端,集成 redux使用 apollo-client 來獲取數(shù)據(jù)修改本地的 apollo store 數(shù)據(jù)提供定制方案 請求攔截 封裝修改 clie...
閱讀 3087·2019-08-30 15:56
閱讀 1242·2019-08-29 15:20
閱讀 1580·2019-08-29 13:19
閱讀 1489·2019-08-29 13:10
閱讀 3391·2019-08-26 18:27
閱讀 3077·2019-08-26 11:46
閱讀 2241·2019-08-26 11:45
閱讀 3769·2019-08-26 10:12