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