Apollo:微服務架構下的配置管理


問題背景

在實際工作中,我們的開發環境,測試環境,生產環境對應的 Mysql 數據庫,Redis 這些信息都不一樣,每個環境都有對應的一套配置,在 Spring Boot 中我們通常會編寫多個配置文件,也就是每個環境一個配置文件。

比如:

application-dev.properties

spring.datasource.druid.url=jdbc:mysql://192.168.0.111:3306/xxx

application-test.properties

spring.datasource.druid.url=jdbc:mysql://192.168.0.112:4306/xxx

使用的時候指定使用哪個環境的配置:

java -jar xxx.jar --spring.profiles.active=test

在微服務架構下,服務的數量會比之前的單體應用多,部署的節點數量也會很多。當某些配置發生修改的時候,我們需要重新修改項目中的代碼,然后重新發布。當然也可以直接通過上面的 --xxx 方式進行參數的傳遞,這種方式不好的地方在於項目中的配置跟線上發布的對應不上。

最簡單的一個示例,直接修改項目中的配置,然后重新編譯,發布,你改一次配置至少得10來分鍾。對於某些活動的應用配置,可能在某個時候突然需要進行緊急修改,這樣一來就被時間耽誤了事情。

最好的辦法是使用配置中心來集中管理配置,可以做到配置修改立馬更新到客戶端,只要1秒鍾就可以搞定配置的修改,優勢很明顯。

框架推薦

今天給大家介紹一款在社區非常火的配置中心:Apollo

Github : https://github.com/ctripcorp/apollo

Apollo(阿波羅)是攜程框架部門研發的分布式配置中心,能夠集中化管理應用不同環境、不同集群的配置,配置修改后能夠實時推送到應用端,並且具備規范的權限、流程治理等特性,適用於微服務配置管理場景。

對Apollo本身就不做過多細致的介紹,感興趣的朋友可以去 Github 詳細了解。

今天主要是講下在 Spring Boot 中如何對接 Apollo 進行配置管理。

首先你得部署好了Apollo,Apollo提供了一個快速體驗包,大家可以下載下來直接啟動,具體操作請參考 Github 。不過官方本身也為我們准備了一個演示的地址,我們可以直接用來學習:http://106.12.25.204:8070 賬號/密碼:apollo/admin

Spring Boot中使用

進入演示地址,找一個應用點進去:

我們基於默認的集群的application空間來做演示

准備一個 Spring Boot 項目,加入 Apollo Client 的 Maven 依賴:

<dependency>
        <groupId>com.ctrip.framework.apollo</groupId>
        <artifactId>apollo-client</artifactId>
        <version>1.1.0</version>
</dependency>

然后配置Apollo的信息,配置放在application.properties中:

app.id=apollo-demo
apollo.meta=http://106.12.25.204:8080
apollo.bootstrap.enabled=true
apollo.bootstrap.namespaces=application
  • app.id:身份信息,就是應用名稱,跟我們第一張圖點進去的一樣
  • apollo.meta:Meta Server(Config Service)
  • apollo.bootstrap.enabled:項目啟動的bootstrap階段,向Spring容器注入配置信息
  • apollo.bootstrap.namespaces:注入命名空間

環境我們直接在main方法中指定,演示方便:

@SpringBootApplication
public class App {
	public static void main(String[] args) {
		// 指定環境(開發演示用,不能用於生產環境))
		System.setProperty("env", "DEV");
		SpringApplication.run(App.class, args);
	}
}

我們可以准備一個接口進行測試配置的讀取,配置讀取的方式有很多種,我們就用最常用的@Value

@RestController
public class DemoController {

	@Value("${test.username}")
	private String name;
	
	@GetMapping("/callHello")
	public String callHello() {
		return name;
	}

}

當配置修改之后,這邊獲取的值也會實時修改,大家可以自己測試下。本文只是簡單的帶大家體驗了一下如何使用,還有很多東西沒有講解,如果大家想學習的話可以去我的網站進行學習,我錄制了一套課程。

課程地址:http://cxytiandi.com/course/23

課程大綱

  • 課程介紹
  • 概念介紹
  • 架構設計介紹
  • Apollo快速部署
  • 后台介紹
  • Apollo整合Spring Boot
  • 配置監聽
  • 存儲Json數據
  • 擴展使用
  • 生產環境部署講解

歡迎加入我的知識星球,一起交流技術,免費學習猿天地的所有課程,包括這套Apollo

目前已經有20+課程了,后續還會更新下去。

猿天地


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM