本文說(shuō)明如何使用 Nacos Client SDK 管理 ACM 配置。
前提條件
登錄 ACM控制臺(tái),并創(chuàng)建一個(gè)示例配置。
- Data ID:com.alibaba.nacos.example.properties
- Group:不填寫(xiě),即使用默認(rèn)的 DEFAULT_GROUP。
- 配置格式:Properties
- 配置內(nèi)容:connectTimeoutInMills=3000
操作步驟
-
在 Maven 項(xiàng)目的 pom.xml 文件中添加以下配置來(lái)獲取 Nacos Client SDK。
<dependency> <groupId>com.alibaba.nacos</groupId> <artifactId>nacos-client</artifactId> <version>${latest.version}</version> </dependency> <!-- 有日志實(shí)現(xiàn),下面可去掉 --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency>
-
在工程中添加以下代碼進(jìn)行配置管理。
說(shuō)明 請(qǐng)將代碼中的 ${endpoint}、${namespace}、${accessKey}、${secretKey} 分別替換為 ACM 控制臺(tái)上命名空間詳情對(duì)話框內(nèi)的 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; /** * 示例代碼,僅用于示例測(cè)試 */ 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"; // 從控制臺(tái)命名空間管理的"命名空間詳情"中拷貝 endpoint、namespace properties.put(PropertyKeyConst.ENDPOINT, "${endpoint}"); properties.put(PropertyKeyConst.NAMESPACE, "${namespace}"); // 通過(guò) ECS 實(shí)例 RAM 角色訪問(wèn) ACM // properties.put("ramRoleName", "$ramRoleName"); properties.put(PropertyKeyConst.ACCESS_KEY, "${accessKey}"); properties.put(PropertyKeyConst.SECRET_KEY, "${secretKey}"); ConfigService configService = NacosFactory.createConfigService(properties); // 發(fā)布配置 boolean publishConfig = configService.publishConfig(dataId, group, content); LOGGER.info("publishConfig: {}", publishConfig); wait2Sync(); // 查詢配置 String config = configService.getConfig(dataId, group, 5000); LOGGER.info("getConfig: {}", config); // 監(jiān)聽(tīng)配置 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 } } }
結(jié)果驗(yàn)證
-
在本地啟動(dòng)項(xiàng)目,若 Console 打印出以下信息,則說(shuō)明 SDK 可正常使用。
12:40:45.567 [main] INFO DemoConfig - getConfig: connectTimeoutInMills=3000
-
在 ACM 控制臺(tái)將示例配置
com.alibaba.nacos.example.properties
更改為以下內(nèi)容并發(fā)布。connectTimeoutInMills=6000
若 Console 打印出以下信息 ,則說(shuō)明 SDK 的配置監(jiān)聽(tīng)功能正常。
[com.alibaba.nacos.client.Worker.longPolling.acm.aliyun.com-********] INFO DemoConfig - innerReceive: {connectTimeoutInMills=6000}
傳參方式
為幫助您快速入門(mén),以上示例代碼采用了以代碼初始化參數(shù)的方式。但是實(shí)際生產(chǎn)中可能有不同環(huán)境(如不同的賬號(hào)、地域或
命名空間
等),參數(shù)因環(huán)境而異,因此需要通過(guò)變量傳入。為方便配置入?yún)ⅰ⒔档团渲贸杀荆珹CM 針對(duì)不同的初始化參數(shù)分別提供了多種傳參方式,詳見(jiàn)下表。
說(shuō)明 對(duì)于阿里云 EDAS 用戶而言,EDAS 會(huì)在發(fā)布環(huán)節(jié)自動(dòng)注入?yún)?shù),用戶無(wú)需采取任何操作。
初始化參數(shù) | 傳參方式 |
---|---|
endpoint | 代碼設(shè)置:詳見(jiàn)以上示例代碼。 |
namespace | 優(yōu)先級(jí)由高到低:
|
accessKey/secretKey | 優(yōu)先級(jí)由高到低:
|
ramRoleName | 優(yōu)先級(jí)由高到低:
說(shuō)明 ramRoleName 的鑒權(quán)優(yōu)先級(jí)高于 accessKey/ secretKey。 |