全部產品
Search
文件中心

Application Configuration Management(Deprecated):Nacos Client

更新時間:Jul 06, 2024

本文說明如何使用 Nacos Client SDK 管理 ACM 配置。

前提條件

登入 ACM控制台,並建立一個樣本配置。

  • Data ID:com.alibaba.nacos.example.properties
  • Group:不填寫,即使用預設的 DEFAULT_GROUP
  • 配置格式:Properties
  • 配置內容:connectTimeoutInMills=3000

操作步驟

  1. 在 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>
  2. 在工程中添加以下代碼進行組態管理。

    說明 請將代碼中的 ${endpoint}${namespace}${accessKey}${secretKey} 分別替換為 ACM 控制台上命名空間詳情對話方塊內的 End Point命名空間 IDAccessKeySecretKey。出於安全考慮,建議使用 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
            }
        }
    }

結果驗證

  1. 在本地啟動專案,若 Console 列印出以下資訊,則說明 SDK 可正常使用。

    12:40:45.567 [main] INFO DemoConfig - getConfig: connectTimeoutInMills=3000
  2. 在 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 優先順序由高到低:
  1. JVM 參數:-Dtenant.id=xxx
  2. 代碼設定:詳見以上範例程式碼。
accessKey/secretKey 優先順序由高到低:
  1. 檔案:accessKey 和 secretKey 以 Properties 格式(滿足 public void java.io.Reader.Properties.load(Reader reader) 方法的要求)儲存在 -Dspas.identity 指定的檔案中。如果不指定,則預設取 /home/admin/.spas_key/<應用程式名稱>檔案,<應用程式名稱>-Dproject.name 指定。
  2. 環境變數:spas_accessKey=xxx spas_secretKey=xxx
  3. 代碼設定:請參見以上範例程式碼。
ramRoleName 優先順序由高到低:
  1. JVM 參數:-Dram.role.name=xxx
  2. 代碼設定:請參見以上範例程式碼。
說明 ramRoleName 的鑒權優先順序高於 accessKey/ secretKey

更多資訊