C++ 注册Nacos

本文介绍了如何从GitHub克隆NacosC++SDK并进行编译,包括设置服务器地址、创建和注册服务实例,以及使用libhv构建一个简单的HTTP服务器。还展示了如何注销服务实例和通过Nacos网关调用服务。
摘要由CSDN通过智能技术生成

下载源码:

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/ping
    router.GET("/ping", [](HttpRequest* req, HttpResponse* resp) {
        return resp->String("pong");
    });

    // curl -v http://ip:port/data
    router.GET("/data", [](HttpRequest* req, HttpResponse* resp) {
        static char data[] = "0123456789";
        return resp->Data(data, 10 /*, false */);
    });

    // curl -v http://ip:port/paths
    router.GET("/paths", [&router](HttpRequest* req, HttpResponse* resp) {
        return resp->Json(router.Paths());
    });

    // curl -v http://ip:port/get?env=1
    router.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/123
    router.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 网关统一调用

通过网关调用

直接调用

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值