本文說明如何使用 Nacos Client SDK 管理 ACM 配置。
前提條件
登入 ACM控制台,並建立一個樣本配置。
- Data ID:com.alibaba.nacos.example.properties
- Group:不填寫,即使用預設的 DEFAULT_GROUP。
- 配置格式:Properties
- 配置內容:connectTimeoutInMills=3000
操作步驟
-
在 Maven 專案的 pom.xml 檔案中添加以下配置來擷取 Nacos Client SDK。
<dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>${latest.version}</version> </dependency> <!-- 有日誌實現,下面可去掉 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency>
-
在工程中添加以下代碼進行組態管理。
說明 請將代碼中的 ${endpoint}、${namespace}、${accessKey}、${secretKey} 分別替換為 ACM 控制台上命名空間詳情對話方塊內的 End Point、命名空間 ID、AccessKey、SecretKey。出於安全考慮,建議使用 RAM 使用者的 AccessKey 和 SecretKey。import com.alibaba.nacos.api.NacosFactory; import com.alibaba.nacos.api.PropertyKeyConst; import com.alibaba.nacos.api.config.ConfigService; import com.alibaba.nacos.api.exception.NacosException; import com.alibaba.nacos.client.config.listener.impl.PropertiesListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Properties; /** * 範例程式碼,僅用於樣本測試 */ public class NacosExample { private static final Logger LOGGER = LoggerFactory.getLogger(NacosExample.class); public static void main(String[] args) throws NacosException { Properties properties = new Properties(); // 指定配置的 DataID 和 Group String dataId = "${dataId}"; String group = "${group}"; String content = "connectTimeoutInMills=5000"; // 從控制台命名空間管理的"命名空間詳情"中拷貝 endpoint、namespace properties.put(PropertyKeyConst.ENDPOINT, "${endpoint}"); properties.put(PropertyKeyConst.NAMESPACE, "${namespace}"); // 通過 ECS 執行個體 RAM 角色訪問 ACM // properties.put("ramRoleName", "$ramRoleName"); properties.put(PropertyKeyConst.ACCESS_KEY, "${accessKey}"); properties.put(PropertyKeyConst.SECRET_KEY, "${secretKey}"); ConfigService configService = NacosFactory.createConfigService(properties); // 發布配置 boolean publishConfig = configService.publishConfig(dataId, group, content); LOGGER.info("publishConfig: {}", publishConfig); wait2Sync(); // 查詢配置 String config = configService.getConfig(dataId, group, 5000); LOGGER.info("getConfig: {}", config); // 監聽配置 configService.addListener(dataId, group, new PropertiesListener() { @Override public void innerReceive(Properties properties) { LOGGER.info("innerReceive: {}", properties); } }); // 更新配置 boolean updateConfig = configService.publishConfig(dataId, group, "connectTimeoutInMills=3000"); LOGGER.info("updateConfig: {}", updateConfig); wait2Sync(); // 刪除配置 boolean removeConfig = configService.removeConfig(dataId, group); LOGGER.info("removeConfig: {}", removeConfig); wait2Sync(); config = configService.getConfig(dataId, group, 5000); LOGGER.info("getConfig: {}", config); } private static void wait2Sync() { try { Thread.sleep(3000); } catch (InterruptedException e) { // ignore } } }
結果驗證
-
在本地啟動專案,若 Console 列印出以下資訊,則說明 SDK 可正常使用。
12:40:45.567 [main] INFO DemoConfig - getConfig: connectTimeoutInMills=3000
-
在 ACM 控制台將樣本配置
com.alibaba.nacos.example.properties
更改為以下內容並發布。connectTimeoutInMills=6000
若 Console 列印出以下資訊 ,則說明 SDK 的配置監聽功能正常。
[com.alibaba.nacos.client.Worker.longPolling.acm.aliyun.com-********] INFO DemoConfig - innerReceive: {connectTimeoutInMills=6000}
傳參方式
為協助您快速入門,以上範例程式碼採用了以代碼初始化參數的方式。但是實際生產中可能有不同環境(如不同的帳號、地區或
命名空間
等),參數因環境而異,因此需要通過變數傳入。為方便配置入參、降低配置成本,ACM 針對不同的初始化參數分別提供了多種傳參方式,詳見下表。
說明 對於阿里雲 EDAS 使用者而言,EDAS 會在發布環節自動注入參數,使用者無需採取任何操作。
初始化參數 | 傳參方式 |
endpoint | 代碼設定:詳見以上範例程式碼。 |
namespace | 優先順序由高到低:
|
accessKey/secretKey | 優先順序由高到低:
|
ramRoleName | 優先順序由高到低:
說明 ramRoleName 的鑒權優先順序高於 accessKey/ secretKey。 |