使用 acm-server 包搭建本地的 ACM 服务器,即可在本地使用 ACM 提供的配置管理功能,还可以用来测试 ACM SDK。

背景信息

目前 ACM 本地服务器支持 Mac、Linux 和 Windows 平台,JDK 1.8 及以上版本。

ACM 本地服务器和 ACM 云服务器的功能对比如下。

对比项 ACM 云服务器 ACM 本地服务器
配置操作 支持 支持
历史版本 支持 不支持
监听查询 支持 不支持
推送轨迹 支持 不支持
命名空间 支持 不支持

在本地部署 ACM 服务器

  1. 下载 acm-server 包到本地。链接为 acm-server.tar.gz
  2. 解压文件。
    tar xzvf acm-server.tar.gz
    当前目录下会生成 acm-server 目录。
  3. 进入 acm-server 目录,执行启动脚本,运行 acm-server。
    cd acm-server/bin
    sudo sh catalina.sh run
  4. 在浏览器地址栏输入 localhost:8080/diamond-server
    acm local server
    出现以上界面则说明 ACM 本地服务器已经部署成功。

创建配置

  1. 配置管理页面单击新建配置
    local new conf
  2. 输入配置的 Data IDGroup ID配置内容,并单击发布
    Local new conf

查询配置

  1. 配置管理页面输入要查询的 Data IDGroup ID,单击查询
    说明 如果只输入 Data ID,则查询具有该 Data ID 的所有配置。如果不输入任何查询条件,则查询所有配置。
  2. 在查询结果列表的操作栏中,单击详情
    local query conf
  3. 配置内容文本框中查看配置内容。

修改配置

  1. 在查询结果列表的操作栏中,单击编辑
    local edit conf
  2. 配置内容文本框中修改配置内容,并单击发布

删除配置

  1. 在查询结果列表的操作栏中,单击删除
    local delete conf
  2. 在弹出对话框中单击确定

ACM-SDK 测试

  1. 绑定 acm.aliyun.com 域名。
    由于 ACM-SDK 默认使用 acm.aliyun.com 域名连接 ACM 服务器,为了将 ACM-SDK 连接到本地 ACM 服务器,需要将 acm.aliyun.com 域名绑定到本地 IP 127.0.0.1

    /etc/hosts 文件中添加 127.0.0.1 acm.aliyun.com

  2. 编写 ACM-SDK 测试用例。
    ACM-SDK 中填入创建的配置 dataIdgroup,如果能成功获取配置,则说明 ACM 本地测试环境部署成功。
    public class ACMTest {
     public static void main(String[] args) throws ConfigException, InterruptedException {
         // 初始化配置服务,控制台通过示例代码自动获取下面参数。入参分别为endpoint,namespace,accessKey,secretKey(为 ACM 专用密钥,不能用阿里云产品的通用密钥)。
         ConfigService.init("acm.aliyun.com", "", "", "");
         String content = ConfigService.getConfig("acm.test", "DEFAULT_GROUP", 6000);
         System.out.println(content);
         // 初始化的时候,给配置添加监听,配置变更会回调通知
         ConfigService.addListener("acm.test", "DEFAULT_GROUP", new ConfigChangeListener() {
             public void receiveConfigInfo(String configInfo) {
                 // 当配置更新后,通过该回调函数将变更内容列出。
                 // 注意回调函数中不要做阻塞操作,否则阻塞通知线程。
                 System.out.println(configInfo);
             }
         });
         // 防止主线程 sleep
         Thread.sleep(100000);
     }
    }