C++ 注册Nacos

下载源码:

git clone GitHub - nacos-group/nacos-sdk-cpp: C++ client for Nacos

编译源码

cd nacos-sdk-cpp

cmake .

make

生成库文件

在nacos-sdk-cpp 下

注册nacos

将include  和libnacos-cli.so libnacos-cli-static.a 放入你的工程

如果Nacos服务地址:192.168.1.124:8848

如果你的c++服务配置为

地址:192.168.1.131

端口:9000

服务名:TestCppService

在你的工程中添加如下代码

注册实例

头文件

#include <iostream>
#include <unistd.h>
#include "Nacos.h"using namespace std;
using namespace nacos;

Properties configProps;
configProps[PropertyKeyConst::SERVER_ADDR] = "192.168.1.118:8848";
INacosServiceFactory *factory = NacosFactoryFactory::getNacosFactory(configProps);
ResourceGuard <INacosServiceFactory> _guardFactory(factory);
NamingService *namingSvc = factory->CreateNamingService();
ResourceGuard <NamingService> _serviceFactory(namingSvc);
Instance instance;
instance.clusterName = "DefaultCluster";
instance.ip = "192.168.1.131";
instance.port = 9000;
instance.instanceId = "1";
instance.ephemeral = true;try
{NacosString serviceName = "TestCppService" ;namingSvc->registerInstance(serviceName, instance);
}
catch (NacosException &e)
{cout << "encounter exception while registering service instance, raison:" << e.what() << endl;return ;
}

注销实例

 try{NacosString serviceName = "TestCppService" ;namingSvc->deregisterInstance(serviceName, "192.168.1.131", 9000);}catch (NacosException &e){cout << "encounter exception while registering service instance, raison:" << e.what() << endl;return ;}

可以在Nacos中心看到注册服务上线:

可以配合libhv 来做测试

下载libhv

git clone libhv: 🔥 比libevent、libuv更易用的国产网络库,用来开发 TCP/UDP/SSL/HTTP/WebSocket/MQTT 客户端/服务端

编译libhv

mkdir build 

cd build

cmake ..

cmake --build .

生成库文件

编译例子

g++ -std=c++11   -I ./libhv-master/include/hv/ -I  ./nacos-sdk-cpp-master/include/     http_server.cpp -o http_server  -L  ./lib  -lhv   -lnacos-cli

合并后的完整代码

#include "hv/HttpServer.h"#include <iostream>
#include <unistd.h>
#include "Nacos.h"using namespace std;
using namespace nacos;void HttpRouter(HttpService &router)
{// curl -v http://ip:port/router.Static("/", "./html");// curl -v http://ip:port/pingrouter.GET("/ping", [](HttpRequest* req, HttpResponse* resp) {return resp->String("pong");});// curl -v http://ip:port/datarouter.GET("/data", [](HttpRequest* req, HttpResponse* resp) {static char data[] = "0123456789";return resp->Data(data, 10 /*, false */);});// curl -v http://ip:port/pathsrouter.GET("/paths", [&router](HttpRequest* req, HttpResponse* resp) {return resp->Json(router.Paths());});// curl -v http://ip:port/get?env=1router.GET("/get", [](HttpRequest* req, HttpResponse* resp) {resp->json["origin"] = req->client_addr.ip;resp->json["url"] = req->url;resp->json["args"] = req->query_params;resp->json["headers"] = req->headers;return 200;});// curl -v http://ip:port/echo -d "hello,world!"router.POST("/echo", [](const HttpContextPtr& ctx) {return ctx->send(ctx->body(), ctx->type());});// curl -v http://ip:port/user/123router.GET("/user/{id}", [](const HttpContextPtr& ctx) {hv::Json resp;resp["id"] = ctx->param("id");return ctx->send(resp.dump(2));});}int main() 
{  Properties configProps;configProps[PropertyKeyConst::SERVER_ADDR] = "192.168.1.118:8848";INacosServiceFactory *factory = NacosFactoryFactory::getNacosFactory(configProps);ResourceGuard <INacosServiceFactory> _guardFactory(factory);NamingService *namingSvc = factory->CreateNamingService();ResourceGuard <NamingService> _serviceFactory(namingSvc);Instance instance;instance.clusterName = "DefaultCluster";instance.ip = "192.168.1.131";instance.port = 9000;instance.instanceId = "1";instance.ephemeral = true;try {NacosString serviceName = "TestCppService" ;namingSvc->registerInstance(serviceName, instance);}catch (NacosException &e) {cout << "encounter exception while registering service instance, raison:" << e.what() << endl;}	HttpService router;HttpRouter(router);http_server_t server;server.port = 8080;server.service = &router;http_server_run(&server);try {NacosString serviceName = "TestCppService" ;namingSvc->deregisterInstance(serviceName, "192.168.1.131", 9000);}catch (NacosException &e) {cout << "encounter exception while registering service instance, raison:" << e.what() << endl;return -1;}sleep(5);return 0;
}

可以配置通过nacos 网关统一调用

通过网关调用

直接调用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/593571.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AI Kimi:帮助教师做好试卷命题

原文&#xff1a;https://www.toutiao.com/article/7353661304307778083/?log_fromcfd0a50014034_1712243146922 最近&#xff0c;Kimichat工具很火。这款软件不仅仅是一个聊天和阅读工具&#xff0c;还是一个强大的教学辅助工具。作为一位教师&#xff0c;尝试使用Kimichat&…

HTML:框架

案例&#xff1a; <frameset cols"5%,*" ><frame src"left_frame.html"><frame src"right_frame.html"> </frameset> 一、<frameset>标签 <frameset>标签&#xff1a;称为框架标记&#xff0c;将一个HTML…

JAVA毕业设计132—基于Java+Springboot+Vue的自习室座位预约小程序管理系统(源代码+数据库)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringbootVue的自习室座位预约小程序管理系统(源代码数据库)132 一、系统介绍 本项目前后端分离带小程序&#xff0c;分为管理员、用户两种角色 1、用户&#xff1a; 注…

分享webgl魔幻星球

界面截图 webgl 是在网页上绘制和渲染三维图形的技术&#xff0c;可以让用户与其进行交互。divcss、canvas 2d 专注于二维图形。 对公司而言&#xff0c;webgl 可以解决他们在三维模型的显示和交互上的问题&#xff1b;对开发者而言&#xff0c;webgl 可以让我们是实现更多、更…

UE4 C++获取Niagara变量值

UE4 获取Niagara变量值 Niagara有一堆Get方法&#xff0c;但是是基于数据的&#xff0c;单独的Set方法是有的&#xff0c;因此&#xff0c;我们这参考Set源码去Get 源代码如下&#xff1a; 我们的实现&#xff08;当然要返回其他类型值&#xff0c;修改一下对应传参就行了…

在线考试|基于Springboot的在线考试管理系统设计与实现(源码+数据库+文档)

在线考试管理系统目录 目录 基于Springboot的在线考试管理系统设计与实现 一、前言 二、系统设计 三、系统功能设计 1、前台&#xff1a; 2、后台 管理员功能 四、数据库设计 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主…

[问题记录] oracle问题汇总记录

plsql问题 1、oracle-initialization error could not locate OCI.dll 下载plsql客户端后&#xff0c;登录显示如图所示的错误 解决方法&#xff0c;点击下方链接&#xff0c;下载64位客户端 Instant Client for Microsoft Windows (x64) 64-bit (oracle.com) 2、显示中文乱…

MongoDB 启动异常

Failed to start up WiredTiger under any compatibility version. 解决方案: 删除WiredTiger.lock 和 mongod.lock两个文件&#xff0c;在重新启动。回重新生成新的文件。

72小时内报告!美国发布关键基础设施网络攻击通报新规草案

美国网络安全和基础设施安全局(CISA)本周四发布了关键基础设施企业如何向政府报告网络攻击的规定草案。 新规基于拜登2022年3月15日签署的美国《关键基础设施网络事件报告法案》(简称CIRCIA)。这是美国联邦政府首次提出一套跨关键基础设施部门的全面网络安全规则。CISA正在就规…

的C++奇迹之旅:值和引用的本质效率与性能比较

文章目录 请添加图片描述 [TOC](文章目录) &#x1f4dd;引用# &#x1f320;引用概念**引用**不是新定义一个变量&#xff0c;而是给**已存在变量取了一个别名**&#xff0c;编译器不会为引用变量开辟内存空间&#xff0c;它和它引用的变量共用同一块内存空间。>定义&#…

软件杯 深度学习乳腺癌分类

文章目录 1 前言2 前言3 数据集3.1 良性样本3.2 病变样本 4 开发环境5 代码实现5.1 实现流程5.2 部分代码实现5.2.1 导入库5.2.2 图像加载5.2.3 标记5.2.4 分组5.2.5 构建模型训练 6 分析指标6.1 精度&#xff0c;召回率和F1度量6.2 混淆矩阵 7 结果和结论8 最后 1 前言 &…

07 - D触发器

---- 整理自B站UP主 踌躇月光 的视频 1. 电路实现 将 D 接到 S 端&#xff0c;D 取反接到 R 端&#xff0c;两个输入合成一个输入&#xff0c;R 和 S 总是相反的&#xff0c;就构成了 D 触发器。再添加一个EN&#xff0c;作为锁存功能&#xff0c;EN0 时&#xff0c;R 和 S 都…