摘要:零為何要學源碼簡單,是我現在看起來最簡單的源碼不會像封裝了一層又一層,把人繞暈,而沒有那么多封裝,上手快,我們學習就應該從簡單的開始憑什么非要去學封的像粽子一樣的源碼,我們就是要去學簡簡單單,平時樸素,接地氣的源碼最接近業務代碼的源碼。
零 為何要學apollo源碼
1 簡單,Apollo是我現在看起來最"簡單"的源碼
不會像spring封裝了一層又一層,把人繞暈,而apollo沒有那么多封裝,上手快,我們學習就應該從簡單的開始,憑什么非要去學封的像粽子一樣的spring源碼,我們就是要去學簡簡單單,平時樸素,接地氣的源碼
2 最接近業務代碼的源碼。而且里面有大量的業務代碼,而我們其實平時寫的最多的就是業務,它向我們展示了大神是如何來寫業務的,如何來配置maven依賴,如何來處理異常,如何來輸入參數判斷
比如它的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) {
學習知識總是從皮毛開始,學產品也是從產品功能開始,讓我們先來看下apollo的應用場景
一 應用場景(載至apollo官方git)
1 傳統開發小A是XX團隊主力開發,有一天產品說要上線一個迪士尼門票內購功能,由于迪士尼門票很火爆,產品一拍腦袋說,每個用戶限購5張!
代碼如下:
private static final int MAX_QTY_PER_USER = 5; //產品需求限購5張 if (qty > MAX_QTY_PER_USER ) { throw new IllegalStateException( String.format("每個用戶最多購買%d張!", MAX_QTY_PER_USER )); }
第二天中午,由于內購實在太火爆,產品急匆匆的跑過來對小A說,趕緊改成每人1張!
小A只好放棄了午飯,改代碼、回歸測試、上線,整整花了1個小時才搞定。。。
小B是YY團隊主力開發,有一天產品說要上線一個歡樂谷門票搶購功能,由于歡樂谷門票很火爆,產品一拍腦袋說,每個用戶限購5張!
小B吸取了小A的教訓,二話不說把配置寫在了Apollo配置中心
第二天中午,由于內購實在太火爆,產品急匆匆的跑過來對小B說,趕緊改成每人1張!
小B不緊不慢的說:10秒內搞定~
配置修改實時生效: 配置可以做到準實時生效,再也不用改配置文件重新發版了
可視化配置管理:配置的后臺管理系統
權限管理: 權限管理、發布審核、操作審計
環境管理: 統一不同環境、不同集群
版本管理: 版本管理、灰度發布
三 Apollo核心概念之namespace公共類型: 應用之間共享配置
私有類型:應用獨有的配置
關聯類型:應用繼承共享配置,并可覆蓋(類似于類的繼承)
四 搭建Apollo服務springboot接入非常簡單,只需在maven里面加個依賴,然后啟動類上加個@EnableApolloConfig就可以了,然后在配置項上使用@Value注解即可
搭建apollo服務還是要頗費一番功夫的,參考《apollo開發指南》
五 架構演進架構V1
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/74799.html
摘要:我們是不是很好奇配置中心如何做到實時更新并且通知到客戶端的這也是一個面試中經常會問到的題目。客戶端得到狀態碼是并且會根據立即去服務端拉取最新的配置。引言 記得我們那時候剛開始學習Java的時候都只是一個單體項目,項目里面的配置基本都是寫在項目里面的properties文件中,比如數據庫配置啥的,各種邏輯開關,一旦這些配置修改了,還需要重啟項目這修改才會生效。隨著各種微服務的誕生,服務的...
摘要:我們是不是很好奇配置中心如何做到實時更新并且通知到客戶端的這也是一個面試中經常會問到的題目。雖然是攜程開源的,但是攜程內部也不用它。客戶端得到狀態碼是并且會根據立即去服務端拉取最新的配置。通過定時任務的補充,可以讓配置達到最終的一致性。 引言記得我們那時候剛開始學習Java的時候都只是一個單體項目,項目里面的配...
摘要:比如使用的時候指定使用哪個環境的配置在微服務架構下,服務的數量會比之前的單體應用多,部署的節點數量也會很多。今天主要是講下在中如何對接進行配置管理。 問題背景 在實際工作中,我們的開發環境,測試環境,生產環境對應的 Mysql 數據庫,Redis 這些信息都不一樣,每個環境都有對應的一套配置,在 Spring Boot 中我們通常會編寫多個配置文件,也就是每個環境一個配置文件。 比如:...
摘要:不同與其它中間件框架,中有大量的業務代碼,它向我們展示了大神是如何寫業務代碼的依賴的層次結構,如何進行基礎包配置,以及工具類編寫,可以稱之為之最佳實踐。代碼參考視圖解析器,這里的配置指的是不檢查頭,而且默認請求為格式。 不同與其它中間件框架,Apollo中有大量的業務代碼,它向我們展示了大神是如何寫業務代碼的:maven依賴的層次結構,如何進行基礎包配置,以及工具類編寫,可以稱之為sp...
摘要:分鐘學是一個系列,簡單暴力,包學包會。接管了請求和狀態管理。一般在生產環境中,我們通常還希望做權限驗證請求攔截等事務處理。 21 分鐘學 apollo-client 是一個系列,簡單暴力,包學包會。 搭建 Apollo client 端,集成 redux使用 apollo-client 來獲取數據修改本地的 apollo store 數據提供定制方案 請求攔截 封裝修改 clie...
閱讀 3077·2019-08-30 15:56
閱讀 1234·2019-08-29 15:20
閱讀 1571·2019-08-29 13:19
閱讀 1473·2019-08-29 13:10
閱讀 3381·2019-08-26 18:27
閱讀 3069·2019-08-26 11:46
閱讀 2234·2019-08-26 11:45
閱讀 3753·2019-08-26 10:12