Nacos and its C++ SDK
Posted on Sat 29 March 2025 in Journal
Abstract | Nacos and its C++ SDK |
---|---|
Authors | Walter Fan |
Category | learning note |
Status | v1.0 |
Updated | 2025-03-29 |
License | CC-BY-NC-ND 4.0 |
2025-03-29
Nacos 简介与使用指南
什么是 Nacos
Nacos(全称:Dynamic Naming and Configuration Service)是阿里巴巴开源的一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 的主要功能包括:
- 服务发现与服务健康监测:动态注册和发现服务实例,以及对服务实例健康状态的检测
- 动态配置管理:集中管理配置,实时推送配置变更
- 动态 DNS 服务:提供权重路由等功能
- 服务及其元数据管理:管理服务的静态元数据
如何使用 Nacos
1. 安装与启动 Nacos 服务器
下载与安装:
# 下载最新稳定版
wget https://github.com/alibaba/nacos/releases/download/2.2.0/nacos-server-2.2.0.tar.gz
# 解压
tar -xvf nacos-server-2.2.0.tar.gz
cd nacos
启动服务:
# 单机模式启动
sh startup.sh -m standalone
或者
git clone https://github.com/nacos-group/nacos-docker.git
cd nacos-docker
docker-compose -f example/standalone-derby.yaml up -d
2. 访问管理控制台
启动成功后,可以通过浏览器访问 Nacos 控制台:
http://localhost:8848/nacos
默认用户名和密码均为:nacos
3. 基本操作
配置管理: - 在控制台可以创建配置命名空间 - 添加、修改和删除配置项 - 导入导出配置
服务管理: - 注册服务实例 - 查询服务实例 - 设置服务健康状态
使用 Nacos C++ SDK
Nacos 提供了 C++ SDK 用于与 Nacos 服务器进行通信。下面是如何使用 Nacos C++ SDK 与 Nacos 服务器通信并管理配置的基本步骤。
1. 安装 Nacos C++ SDK
首先,需要安装 Nacos C++ SDK:
git clone https://github.com/nacos-group/nacos-sdk-cpp.git
cd nacos-sdk-cpp
# 创建构建目录
mkdir build
cd build
# 配置并构建SDK
cmake ..
make
make install
2. 初始化 Nacos 客户端
下面是使用 C++ SDK 初始化 Nacos 客户端的示例:
//nacos_test_1.cpp
#include <iostream>
#include "Nacos.h"
using namespace std;
using namespace nacos;
int main() {
Properties props;
props[PropertyKeyConst::SERVER_ADDR] = "10.100.212.8:8848";//Server address
INacosServiceFactory *factory = NacosFactoryFactory::getNacosFactory(props);
ResourceGuard <INacosServiceFactory> _guardFactory(factory);
ConfigService *n = factory->CreateConfigService();
ResourceGuard <ConfigService> _serviceFactory(n);
NacosString ss = "";
try {
ss = n->getConfig("k", NULLSTR, 1000);
}
catch (NacosException &e) {
cout <<
"Request failed with curl code:" << e.errorcode() << endl <<
"Reason:" << e.what() << endl;
return -1;
}
cout << ss << endl;
return 0;
}
编译步骤:
g++ -I/usr/local/include/nacos/ test/nacos_test_1.cpp -lcurl -lz -L. -lnacos-cli-static -o nacos_test_1
3. 获取配置
// 获取配置
try {
// 参数:dataId, group
std::string content = configService->getConfig("example", "DEFAULT_GROUP", 5000);
std::cout << "获取配置成功,内容:" << content << std::endl;
} catch (NacosException &e) {
std::cout << "获取配置失败,异常:" << e.what() << std::endl;
}
4. 发布配置
// 发布配置
try {
// 参数:dataId, group, content
bool isPublishOk = configService->publishConfig("example", "DEFAULT_GROUP", "config content");
if (isPublishOk) {
std::cout << "发布配置成功" << std::endl;
} else {
std::cout << "发布配置失败" << std::endl;
}
} catch (NacosException &e) {
std::cout << "发布配置异常:" << e.what() << std::endl;
}
5. 删除配置
// 删除配置
try {
// 参数:dataId, group
bool isRemoveOk = configService->removeConfig("example", "DEFAULT_GROUP");
if (isRemoveOk) {
std::cout << "删除配置成功" << std::endl;
} else {
std::cout << "删除配置失败" << std::endl;
}
} catch (NacosException &e) {
std::cout << "删除配置异常:" << e.what() << std::endl;
}
6. 监听配置变化
// 定义监听器类
class MyConfigListener : public Listener {
public:
void receiveConfigInfo(const NacosString &configInfo) {
std::cout << "收到配置变更通知:" << configInfo << std::endl;
}
};
// 添加监听器
MyConfigListener *listener = new MyConfigListener();
try {
configService->addListener("example", "DEFAULT_GROUP", listener);
std::cout << "添加配置监听器成功" << std::endl;
} catch (NacosException &e) {
std::cout << "添加配置监听器失败,异常:" << e.what() << std::endl;
}
// ... 程序运行一段时间后 ...
// 移除监听器
configService->removeListener("example", "DEFAULT_GROUP", listener);
delete listener;
7. 完整示例
下面是一个完整的使用 Nacos C++ SDK 进行配置管理的示例:
#include <iostream>
#include <string>
#include <unistd.h> // for sleep()
#include "Nacos.h"
using namespace std;
using namespace nacos;
// 定义配置变更监听器
class MyConfigListener : public Listener {
public:
void receiveConfigInfo(const NacosString &configInfo) {
cout << "收到配置变更通知:" << configInfo << endl;
}
};
int main() {
// 初始化属性
Properties props;
props[PropertyKeyConst::SERVER_ADDR] = "10.100.212.8:8848";
props[PropertyKeyConst::NAMESPACE] = "public";
INacosServiceFactory *factory = NacosFactoryFactory::getNacosFactory(props);
ResourceGuard <INacosServiceFactory> _guardFactory(factory);
// 创建配置服务
ConfigService *configService = NULL;
try {
configService = factory->CreateConfigService();
cout << "初始化 Nacos 配置服务成功" << endl;
} catch (NacosException &e) {
cout << "初始化 Nacos 配置服务失败,异常:" << e.what() << endl;
return -1;
}
// 定义配置ID和组
string dataId = "example";
string group = "DEFAULT_GROUP";
// 发布配置
try {
string content = "initial config content";
bool isPublishOk = configService->publishConfig(dataId, group, content);
cout << "发布配置" << (isPublishOk ? "成功" : "失败") << endl;
} catch (NacosException &e) {
cout << "发布配置异常:" << e.what() << endl;
}
// 获取配置
try {
string content = configService->getConfig(dataId, group, 5000);
cout << "获取配置成功,内容:" << content << endl;
} catch (NacosException &e) {
cout << "获取配置失败,异常:" << e.what() << endl;
}
// 添加配置监听
MyConfigListener *listener = new MyConfigListener();
try {
configService->addListener(dataId, group, listener);
cout << "添加配置监听器成功" << endl;
// 修改配置触发监听
sleep(1); // 等待一秒
configService->publishConfig(dataId, group, "updated config content");
// 等待接收配置变更
sleep(5);
} catch (NacosException &e) {
cout << "配置监听异常:" << e.what() << endl;
}
// 移除监听器并删除配置
configService->removeListener(dataId, group, listener);
delete listener;
try {
bool isRemoved = configService->removeConfig(dataId, group);
cout << "删除配置" << (isRemoved ? "成功" : "失败") << endl;
} catch (NacosException &e) {
cout << "删除配置异常:" << e.what() << endl;
}
// 释放资源
delete configService;
return 0;
}
编译步骤
g++ -I/usr/local/include/nacos/ test/nacos_test_2.cpp -lcurl -lz -L. -lnacos-cli-static -o nacos_test_2
总结
Nacos 是一个强大的服务发现和配置管理平台,通过 C++ SDK,您可以轻松地将 Nacos 集成到 C++ 应用程序中。使用 Nacos C++ SDK,您可以执行以下操作:
- 获取、发布和删除配置
- 监听配置变更
- 服务注册与发现
在实际应用中,Nacos 可以帮助您实现配置的集中管理和动态更新,简化分布式系统的配置管理复杂度。
本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可。