1 簡單,Apollo是我如今看起來最"簡單"的源碼
不會像spring封裝了一層又一層,把人繞暈,而apollo沒有那麼多封裝,上手快,咱們學習就應該從簡單的開始,憑什麼非要去學封的像糉子同樣的spring源碼,咱們就是要去學簡簡單單,平時樸素,接地氣的源碼git
2 最接近業務代碼的源碼。並且裏面有大量的業務代碼,而咱們其實平時寫的最多的就是業務,它向咱們展現了大神是如何來寫業務的,如何來配置maven依賴,如何來處理異常,如何來輸入參數判斷github
好比它的maven依賴層次結構
spring
它使用不一樣的異常處理類
springboot
它對DTO,排序等的使用架構
@RequestMapping(value = "/apps/{appId}/envs/{env}/clusters/{clusterName}/namespaces/{namespaceName}/items", method = RequestMethod.GET) public List<ItemDTO> findItems(@PathVariable String appId, @PathVariable String env, @PathVariable String clusterName, @PathVariable String namespaceName, @RequestParam(defaultValue = "lineNum") String orderBy) { List<ItemDTO> items = configService.findItems(appId, Env.valueOf(env), clusterName, namespaceName); if ("lastModifiedTime".equals(orderBy)) { Collections.sort(items, (o1, o2) -> {
平凡而接地氣,讓咱們有了學習的榜樣app
固然也有比較"高端"的,好比servlet3.0中的DeferredResult用來保持長鏈接maven
@RequestMapping(method = RequestMethod.GET) public DeferredResult<ResponseEntity<List<ApolloConfigNotification>>> pollNotification(
自定義註解ide
@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)測試
小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秒內搞定~
springboot接入很是簡單,只需在maven裏面加個依賴,而後啓動類上加個@EnableApolloConfig就能夠了,而後在配置項上使用@Value註解便可
搭建apollo服務仍是要頗費一番功夫的,參考《apollo開發指南》
架構V1