本篇文章爲系列文章,未讀第一集的同學請猛戳這裏:微服務系列之Apollo配置中心(一)
本篇文章講解 Apollo 部門管理、用戶管理、配置管理、集羣管理。
點擊鏈接觀看:Apollo 部門管理、用戶管理、配置管理、集羣管理視頻(獲取更多請關注公衆號「哈嘍沃德先生」)
部門及用戶管理
接下來我們深入學習一下 Apollo 控制檯的使用,剛纔我們是通過樣例部門和 Apollo 用戶來操作的,可以自定義部門和用戶嗎?答案當然是可以的。下面我們就講一下如何自定義部門和用戶,如何給項目指定用戶並分配權限以及刪除應用。
應用配置
點擊管理員工具
下的系統參數
菜單進入應用配置
頁面。
在應用配置
頁面通過organizations
關鍵字查詢部門信息,下圖爲默認信息。
在value
一欄中添加自定義部門信息,點擊保存,無特殊說明則修改完一分鐘實時生效。
此時再去創建項目時,就可以選擇我們剛纔添加的部門了。
用戶管理
點擊管理員工具
下的用戶管理
菜單進入用戶管理頁面。
填寫用戶信息,點擊提交,無特殊說明則修改完一分鐘實時生效。
此時再去創建項目時,就可以選擇我們剛纔添加的用戶了。如下圖,我們給 product-service
項目分配了負責人 zhangsan
,如果使用zhangsan
登錄的話,則只能看到他自己負責的項目。而 apollo
用戶是超級管理員所以可以看到所有項目。
權限分配
進入項目後點擊右上角的授權
按鈕,進入權限管理
頁面。
可以給指定用戶添加對該應用的修改權
和發佈權
,比如 order-service 是 apollo 創建的,但是我授權給了 zhangsan,zhangsan 再登錄時也就可以操作這個項目了。
刪除應用(項目)
點擊管理員工具
下的刪除應用、集羣、AppNamespace
菜單進入對應頁面。
在刪除應用
欄目中的 AppId
處填寫應用 id 先進行查詢,查詢到應用後點擊刪除應用
即可。
配置管理
這一小節我們通過大量配圖演示如何增改刪配置信息,以及如何添加 Namespace。
添加配置
進入項目後點擊右上角的 新增配置
。
添加配置項信息,點擊提交即可,剛添加的配置信息處於未發佈狀態。
修改配置
點擊對應配置項的修改按鈕。
修改配置信息,也可填寫修改說明,點擊提交即可,更新後的信息如需生效要重新發布。
回滾
回滾代表恢復至上一次的發佈狀態,比如剛剛發佈的值是 order-service-2.0,回滾以後會恢復至上一次發佈的 order-service。
刪除配置
點擊對應配置項的刪除按鈕。
刪除配置信息後如需生效要重新發布。
添加 Namespace
如果配置項過多的情況下,可以通過 Namespace 來進行管理,Namespace 就相當於一份配置文件。
進入項目後點擊左下角添加Namespace
。
選擇創建Namespace
,類型這裏需要說明一下:
- public:公共配置,其他應用也可以使用;
- private:私有配置,僅限本應用使用。
可以通過文本
的方式添加多個配置項。
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=1234
測試
客戶端配置文件信息如下:
server:
port: 9090 # 端口
spring:
application:
name: order-service # 應用名稱
# apollo 相關配置
app:
id: order-service # 與 Apollo 配置中心中的 AppId 一致
apollo:
meta: http://localhost:8080 # Apollo 中的 Eureka 註冊中心地址
#cluster: # 指定 Apollo 集羣,默認爲 default,相同集羣實例使用對應集羣的配置
#cacheDir: # 配置緩存目錄,網絡不可用時任然可提供配置服務
bootstrap:
enable: true # 啓用 apollo
env: DEV # 指定環境
註解方式
在啓動類或配置類中添加 @EnableApolloConfig({"application", "application-mysql"})
註解並指定 Namespace,就可以直接使用 Spring 的 @Value
註解來獲取配置信息,${}
中對應 Apollo 中的 key,:
後跟默認值。
@Value("${spring.datasource.driver-class-name:}")
private String driverClassName;
@Value("${spring.datasource.url:}")
private String url;
@Value("${spring.datasource.username:root}")
private String username;
@Value("${spring.datasource.password:root}")
private String password;
@GetMapping("/datasourceByAnnotation")
public Map<Object, Object> getDatasourceByAnnotation() {
// JDK9中的新特性,快速創建只讀集合。
return Map.of("driverClassName", driverClassName,
"url", url,
"username", username,
"password", password);
}
訪問:http://localhost:9090/datasourceByAnnotation 結果如下:
API方式
我們可以通過以下代碼讀取 Apollo 中的配置信息。
@GetMapping("/datasource")
public Map<Object, Object> getDatasource() {
//ConfigService.getAppConfig(); // 讀取默認 Namespace
// 讀取指定 Namespace
Config config = ConfigService.getConfig("application-mysql");
// 獲取配置信息,第一個參數爲配置項的 key,第二個參數爲默認值(讀取不到配置就會使用默認值,建議都加上默認值)
String driverClassName = config.getProperty("spring.datasource.driver-class-name", null);
String url = config.getProperty("spring.datasource.url", null);
String username = config.getProperty("spring.datasource.username", null);
String password = config.getProperty("spring.datasource.password", null);
// JDK9中的新特性,快速創建只讀集合。
return Map.of("driverClassName", driverClassName,
"url", url,
"username", username,
"password", password);
}
訪問:http://localhost:9090/datasource 結果如下:
公共配置
剛纔添加 Namespace 時我們選擇的是 private 私有配置,僅限本項目使用,如果有一些配置我們所有項目都需要使用,可以通過公共配置實現。
添加公共配置
比如我們先創建一個公共項目 common-service
。
然後創建公共的 Namespace。
添加配置信息提交併發佈。
值得注意的是,公共配置信息是哪個項目創建的才擁有修改和刪除的權力,其他項目只能選擇關聯和覆蓋。
關聯公共配置
讓 order-service
項目關聯 common-service
的公共配置信息。
進入項目後點擊左下角添加Namespace
,選擇關聯公共Namespace,添加剛纔創建的公共Namespace。
關聯成功以後在項目首頁可以看到關聯的配置信息,且只能選擇覆蓋此配置,不能刪除和修改配置信息(可以刪除Namespace)。或者直接在私有配置下配置同名的配置項,同名的私有配置會比公共配置優先級高。
測試
在啓動類或配置類中添加 @EnableApolloConfig({"application", "application-mysql", "microservice.application-common"})
註解並指定 Namespace,就可以直接使用 Spring 的 @Value
註解來獲取配置信息,${}
中對應 Apollo 中的 key,:
後跟默認值。
@Value("${commonName:}")
private String commonName;
@GetMapping("/commonByAnnotation")
public Map<Object, Object> getCommonByAnnotation() {
return Map.of("commonName", commonName);
}
訪問:http://localhost:9090/commonByAnnotation 結果如下:
我們可以通過以下的方式讀取 Apollo 中的配置信息。
@GetMapping("/common")
public Map<Object, Object> getCommon() {
//ConfigService.getAppConfig(); // 讀取默認 Namespace
// 讀取指定 Namespace
Config config = ConfigService.getConfig("microservice.application-common");
// 獲取配置信息,第一個參數爲配置項的 key,第二個參數爲默認值(讀取不到配置就會使用默認值,建議都加上默認值)
String commonName = config.getProperty("commonName", null);
return Map.of("commonName", commonName);
}
訪問:http://localhost:9090/common 結果如下:
集羣管理
在有些特殊情況下,比如部署在 A 機房的應用連接的 MySQL 服務器地址和部署在 B 機房的應用連接的 MySQL 服務器地址不一樣。在這種情況下,可以通過在 Apollo 創建不同的集羣來解決。
添加集羣
進入項目後點擊左下角添加集羣
,比如添加 SHAOY(歐陽數據中心)。
同步配置
集羣其實就是另一個環境而已,所有的操作和前面講的都一樣,這裏就不再贅述。有一點需要說明一下,就是同步配置功能。
假設 SHAOY 這個集羣的配置信息和默認集羣的配置信息只有個別地方不一致,大部分都是一致的,我們挨個添加豈不是很浪費時間?
可以看到在 SHAOY 這個集羣下的 application-mysql 的 Namespace 中是沒有任何配置項的。不急,Apollo 給我們提供了一個同步配置的功能。通過同步配置功能,可以使多個環境、集羣間的配置保持一致,需要注意的是,同步完之後需要發佈後纔會對應用生效。
既然是將默認集羣環境的配置同步至 SHAOY 環境中,那就在默認環境中選擇需要同步的 Namespace,點擊同步配置按鈕。
勾選需要同步的配置,選擇要同步到哪個集羣,然後點擊下一步。
點擊同步按鈕以後配置將同步成功,同步完之後需要發佈後纔會對應用生效。
數據已經同步過來了,我們根據需求修改了服務器地址爲 192.168.10.101,然後發佈配置。
測試
配置文件中通過 apollo.cluster
指定集羣名稱。
server:
port: 9090 # 端口
spring:
application:
name: order-service # 應用名稱
# apollo 相關配置
app:
id: order-service # 與 Apollo 配置中心中的 AppId 一致
apollo:
meta: http://localhost:8080 # Apollo 中的 Eureka 註冊中心地址
cluster: SHAOY # 指定 Apollo 集羣,默認爲 default,相同集羣實例使用對應集羣的配置
#cacheDir: # 配置緩存目錄,網絡不可用時任然可提供配置服務
bootstrap:
enable: true # 啓用 apollo
env: DEV # 指定環境
# 自定義配置
name: order-service-dev
mysql:
host: localhost
port: 3306
username: root
password: root
之前的代碼無需做任何改變,訪問:http://localhost:9090/datasourceByAnnotation 結果如下:
下一篇我們講解 Apollo 多環境部署方案,教大家搭建除了 DEV 的其他環境,記得關注噢~
本文采用 知識共享「署名-非商業性使用-禁止演繹 4.0 國際」許可協議
。
大家可以通過 分類
查看更多關於 Spring Cloud
的文章。
🤗 您的點贊
和轉發
是對我最大的支持。
📢 掃碼關注 哈嘍沃德先生
「文檔 + 視頻」每篇文章都配有專門視頻講解,學習更輕鬆噢 ~