本文介绍 ACM C++ SDK 的使用方式。ACM C++ SDK 只支持 Linux 平台。
安装 ACM C++ SDK
- 下载 SDK 依赖包:ACM C++ SDK
- 下载完成后进行解压,会有如下目录结构:
- example/
- include/
- lib/
上面的目录和文件的作用如下:
- example:acm.cpp 用于演示 SDK 使用。Makefile 用于 example 的编译和管理。
- include:您自己编写的程序需要 include 的头文件。
- lib:分别是 64 的静态库和动态库。
- 设置环境变量 LD_LIBRARY_PATH,指定 ACM 动态库搜索路径,即安装的路径。
export LD_LIBRARY_PATH=/usr/lib64:/usr/lib:/lib:/lib64:../lib
- 进入 example 目录,修改 acm.cpp 文件的起始参数和配置的 dataId、group。执行 make 命令编译。执行示例代码如下:
cd example //进入example目录 vim acm.cpp //修改acm.cpp文件 make //编译示例代码 ./acm //执行示例代码
示例代码
在您的工程中运行以下代码进行配置管理。
#include "ACM.h"
using namespace std;
using namespace acm;
//定义监听器
class MyListener : public ManagerListener
{
public:
MyListener(const std::string& data_id, const std::string& group):data_id_(data_id),group_(group){}
virtual ~MyListener()
{}
virtual void getExecutor()
{
printf("data_id:%s group:%s getExecutor\n",data_id_.c_str(), group_.c_str());
}
//配置变更时回调
virtual void receiveConfigInfo( std::string &configInfo)
{
printf("data_id:%s group:%s configInfo:\n%s\n", data_id_.c_str(), group_.c_str(), configInfo.c_str());
config_ = configInfo;
}
private:
std::string data_id_;
std::string group_;
std::string config_;
};
int main() {
ACM::init("acm.aliyun.com", // endpoint: ACM 控制台查看
"***************", // namespace: ACM 控制台查看
"***************", // accessKey: ACM 控制台查看
"***************"); // secretKey: ACM 控制台查看
//监听配置的dataId和group
std::string dataId = "${dataId}";
std::string group = "${group}";
std::string content;
//主动拉取配置
ACM::getConfig(dataId, group, 5000, content);
printf("get ok config %s\n", content.c_str());
MyListener* listener = new MyListener(dataId, group);
//监听配置变更
ACM::addListener(dataId, group, listener);
printf("add listener ok %s %s\n", dataId.c_str(), group.c_str());
do {
printf("input q to quit\n");
} while (getchar() != 'q');
return 0;
}
接口说明
- 初始化设置接口
设置 endpoint,nameSpace,accessKey,secretKey。
static void init(const char* endpoint, const char* nameSpace, char* accessKey, char* secretKey);
各参数说明如下:
参数名 参数类型 描述 endpoint const char* ACM 域名,控制台获得 nameSpace const char* 命名空间,控制台获得 accessKey char* accessKey,控制台获得 secretKey char* secretKey,控制台获得 -
获取配置接口
用于服务启动的时候从 ACM 获取配置。
static bool getConfig(const std::string &dataId, const std::string &group, int timeoutMs, std::string &content);
参数说明见下表:
参数名 参数类型 描述 dataId const string 配置 ID,采用类似 package.class(如com.taobao.tc.refund.log.level)的命名规则保证全局唯一性,class 部分建议是配置的业务含义。全部字符小写。只允许英文字符和 4 种特殊字符(”.”、”:”、”-“、”_”),不超过 256 字节。 group const string 配置分组,建议填写产品名:模块名(如 ACM:Test)保证唯一性,只允许英文字符和 4 种特殊字符(”.”、”:”、”-“、”_”),不超过 128 字节。 timeoutMs int 超时时间 content string 返回的配置内容 -
监听配置接口
如果希望 ACM 推送配置变更,可以使用 ACM 动态监听配置接口来实现。
static void addListener(const std::string &dataId, const std::string &group, ManagerListener* listener);
参数说明见下表:
参数名 参数类型 描述 dataId const string dataId group const string group listener ManagerListener 监听器,配置变更会执行监听器的回调函数。 -
取消配置监听接口
用于服务启动的时候取消配置监听。
static void removeListener(const std::string &dataId, const std::string &group, ManagerListener* listener);
参数说明见下表:
参数名 参数类型 描述 dataId const string dataId group const string group listener ManagerListener 待取消的监听器