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  .   http_server.cpp -o http_server  -L  ./lib  -lhv

合并后的完整代码

#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.mzph.cn/news/786716.shtml

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

相关文章

ExpressionUtil的应用

ExpressionUtil是什么 ExpressionUtil是一个工具类&#xff0c;用于处理表达式相关的操作。它提供了一些方法&#xff0c;方便用户在程序中处理表达式相关的计算、比较、转换等操作。例如&#xff0c;可以使用ExpressionUtil计算一个数学表达式的结果&#xff0c;比较两个表达式…

代码随想录笔记|C++数据结构与算法学习笔记-栈和队列(〇)|stack、queue、单调队列和优先级队列(priority_queue)、大顶堆和小顶堆

文章目录 stack容器stack 基本概念常用接口构造函数赋值操作数据存取大小操作 queue容器queue常用接口构造函数赋值操作数据存取大小操作 栈和队列的灵魂四问C中stack,queue是容器吗我们使用的stack,queue属于哪个版本的STL我们使用的STL中stack,queue是如何实现的&#xff1f;…

SAP CAP篇十六:写个ERP的会计系统吧,Part III

本文目录 本系列文章目标开发步骤数据库表设计Service 定义生成Fiori App更新CDS Annotation更新Entity: Companies更新Entity&#xff1a;Accounts App运行 本系列文章 SAP CAP篇一: 快速创建一个Service&#xff0c;基于Java的实现 SAP CAP篇二&#xff1a;为Service加上数据…

volatile关键字的作用

volatile 关键字告诉编译器 i 是随时可能发生变化的&#xff0c;每次使用它的时候必须从内存中取出 i 的值&#xff0c;因而编译器生成的汇编代码会重新从 i 的地址处读取数据放在 k 中。 所以说使用 volatile 声明的变量的值的时候&#xff0c;系统总是重新从它所在的内存读…

NLP学习路线总结:从入门到精通

自然语言处理&#xff08;Natural Language Processing&#xff0c;NLP&#xff09;是人工智能领域的重要分支&#xff0c;它致力于使计算机能够理解、解释和生成人类语言。NLP技术的应用范围广泛&#xff0c;涵盖了机器翻译、情感分析、语义理解、信息抽取等诸多领域。对于想要…

每日一题---存在重复元素(1)和(2)

文章目录 一、存在重复数组1,1.题目展示1.2.解题思路1.3.参考代码 二、存在重复元素||2.1.题目展示2.2.解题思路2.3.参考代码 大家学习完了数组&#xff0c;指针等内容可以进行刷题了&#xff0c;刷题不仅可以增加大家的代码量&#xff0c;也可以积累自己的经验&#xff0c;言归…

C语言之指针的指向地址和指针的内容总结(八十九)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

量化交易入门(三十九)怎么获取A股历史数据

前面我们都是以美股的苹果股票为例进行策略和技术指标的回测&#xff0c;量化交易对中国A股是否适用呢&#xff1f;我们怎么样免费获取A股的股票数据呢&#xff1f;我给你们介绍三个免费的数据平台Tushare 、AkShare和Baostock。 1、Tushare Tushare是一个免费、开源的Pytho…

HashMap 和 Hashtable 有什么区别?

HashMap和Hashtable在Java中都是用于存储键值对的集合&#xff0c;但它们之间存在几个重要的区别。 线程安全性&#xff1a; Hashtable是线程安全的。这意味着多个线程可以同时操作Hashtable&#xff0c;而不会出现数据不一致的情况。但是&#xff0c;这种线程安全性的代价是降…

基于决策树算法的糖尿病遗传风险预测研究

基于决策树算法的糖尿病遗传风险预测研究 一、引言 糖尿病是一种常见的慢性疾病&#xff0c;全球范围内患病率持续上升。遗传因素在糖尿病的发病中起着重要作用&#xff0c;因此&#xff0c;预测糖尿病的遗传风险对于早期预防、诊断和治疗具有重要意义。本研究旨在利用决策树…

2023年第十四届蓝桥杯 - 省赛 - Python研究生组 - A.工作时长

题目 数据文件&#xff1a;https://labfile.oss.aliyuncs.com/courses/21074/records.txt Idea 直接通过 datetime 模块加载时间字符串进行格式化&#xff0c;然后对时间列表进行排序&#xff0c;最后两两计算时间差。 Code Python from datetime import datetimetime_lis…

深入浅出Prim算法和Kruskal算法求最小生成树算法

深入浅出Prim算法和Kruskal算法求最小生成树&#xff1a; Prim算法 ​ 首先初始化距离 正无穷。 ​ n 次迭代(因为要选中n个点)&#xff0c;找到不在集合(当前生成树)中的且距离当前块最小的点(记作)m点&#xff0c;&#xff0c;用m点去更新其他掉到集合中的点的距离&#x…

目标检测——服饰属性标签识别数据集

一、重要性及意义 首先&#xff0c;随着电商、时尚推荐等业务的发展&#xff0c;服饰属性标签识别已经成为一项关键的计算机视觉任务。这些标签&#xff0c;如颜色、款式、材质等&#xff0c;对于实现图像搜索、时尚推荐等业务需求至关重要。服饰属性标签识别数据集为此类任务…

Excel 数据-分列的三个经常用法

Case 1 &#xff1a;有时候数据导出时如果没有电子表格的话&#xff0c;只能导出本地文件&#xff0c;如下图情况&#xff1a; 可以使用数据-分列处理数据&#xff1a; 原来是因为SAP导出数据没有完成的原因&#xff0c;或者关闭Excel重新打开试一下。 重新打开后可以输入了 C…

HarmonyOS Connect生态设备UX体验设计

HarmonyOS Connect生态设备UX体验设计 HarmonyOS Connect是华为推出的面向万物互联时代的设备连接与互操作解决方案&#xff0c;旨在打破设备之间的壁垒&#xff0c;提供无缝、便捷的用户体验。 HarmonyOS Connect生态设备UX体验设计的基本原则包括&#xff1a; 一致性&…

Kubernetes activemq artemis系列 | k8s部署artemis主从 v2.33.0

主从配置直通车 本文提供了yaml可直接使用&#xff08;镜像是自己构建的&#xff09; amqmaster.yaml apiVersion: apps/v1 kind: StatefulSet metadata:name: artemismasterlabels:app: artemisbroker: master spec:serviceName: artemismasterreplicas: 1selector:matchLa…

python3GUI--不同样式的登录注册界面By:PyQt5(附下载地址)

文章目录 一&#xff0e;前言二&#xff0e;介绍&效果展示界面一1.注册2.登录3.切换效果 界面二1.注册2.登录3.切换效果 界面三1.注册3.登录3.切换效果 界面四1.注册2.登录3.切换效果 界面五1.注册2.登录3.切换效果 界面六1.注册2.普通登录3.快捷登录4.切换效果 界面七1.登…

网络检测与监控

1.IP sla 服务等级质量检测&#xff0c;思科私有&#xff0c;提供商与用户之间的协议 可以对带宽、延迟、丢包率、网络抖动进行检测 &#xff08;1&#xff09;针对icmp进行检测&#xff1a; r1(config)#ip sla 1 r1(config-ip-sla)#icmp-echo 12.12.12.2 source-ip 12.12…

在决策上,我不随便给别人建议

在决策上&#xff0c;我不随便给别人建议 之前看过一个视频&#xff0c;视频中主人公说**「我不随便给别人决策上的建议&#xff0c;我何德何能&#xff0c;自己还没活明白呢&#xff0c;给别人建议干啥。」** 这句话我挺认同的。 如果我自己很成功&#xff0c;那一定是靠你自…

基于FPGA的HDMI方块移动程序设计

前面写了一篇关于HDMI视频接口的文章《基于FPGA的HDMI视频接口的设计》&#xff0c;该文章对HDMI的相关知识点做了讲解&#xff0c;这里不再重复&#xff0c;本篇文章直接实现一个简单功能-方块的移动。 该系统程序主要实现的功能就是通过串口下发指令控制方块的位置移动&…