李水手 2024-10-05 20:48 采纳率: 100%
浏览 12
已结题

nacos-sdk-cpp不能在同一台机器上创建两个实例吗?

用QT调用nacos-sdk-cpp提供的第三方库,两个工程,就使用给的示例代码,第一个注册,第二个获取实例,不管哪个先启动都没问题,后面启动的那个就会异常退出,求解。

这是获取的

#include <iostream>
#include <list>
#include "Nacos.h"

using namespace std;
using namespace nacos;

int main() {
    Properties configProps;
    configProps[PropertyKeyConst::SERVER_ADDR] = "127.0.0.1";
    INacosServiceFactory *factory = NacosFactoryFactory::getNacosFactory(configProps);
    ResourceGuard <INacosServiceFactory> _guardFactory(factory);
    NamingService *namingSvc = factory->CreateNamingService();
    ResourceGuard <NamingService> _guardService(namingSvc);

    while (1) {


    list <Instance> instances = namingSvc->getAllInstances("TestNamingService1");
    cout << "getAllInstances from server:" << endl;
    for (list<Instance>::iterator it = instances.begin();
         it != instances.end(); it++) {
        cout << "Instance:" << it->toString() << endl;
    }
    sleep(10);
 }
    return 0;
}


//注册
    Properties configProps;
    configProps[PropertyKeyConst::SERVER_ADDR] = "127.0.0.1:8848";
    INacosServiceFactory *factory = NacosFactoryFactory::getNacosFactory(configProps);
    ResourceGuard <INacosServiceFactory> _guardFactory(factory);
    NamingService *namingSvc = factory->CreateNamingService();
    ResourceGuard <NamingService> _serviceFactory(namingSvc);
    Instance instance;
    instance.clusterName = "nocos-test";
    instance.ip = "127.0.0.10";
    instance.port = 12333;
    instance.instanceId = "100";
    instance.ephemeral = true;
    instance.groupName="test";


    try {
    NacosString ip=CtrmCommom::Instance()->m_localIp.toStdString();

    namingSvc->registerInstance("test",instance);
    }
    catch (NacosException &e) {
        qDebug() << "encounter exception while registering service instance, raison:" << e.what() << endl;

    }

  • 写回答

2条回答 默认 最新

  • 李水手 2024-10-06 10:06
    关注

    AI给出的答案:

    在一台机器上只能创建一个NamingService实例。‌这是因为NamingService的设计初衷是为了确保服务的唯一性和一致性,避免多个实例导致的混乱和资源冲突。

    NamingService的主要功能和作用包括服务注册和发现、健康检查、负载均衡以及元数据管理。在Nacos中,NamingService负责管理所有服务的网络地址信息和服务名称,服务提供者将其服务注册到Nacos注册中心,服务消费者可以从注册中心查询可用服务并提供者的地址信息,建立网络连接并调用服务‌1。此外,Nacos命名服务还可以对注册的服务进行健康检查,自动删除离线的服务提供者,并提供负载均衡算法选择可用的服务提供者‌1。

    具体实现上,Nacos的NamingService通过NacosServiceManager来创建和管理NamingService实例。当NamingService实例未初始化时,NacosServiceManager会创建一个新的NamingService实例,并通过加锁机制确保只有一个实例被创建‌2。在客户端初始化时,Nacos客户端会创建一个线程池,定期执行登录请求,并在请求头中携带认证信息,以确保安全访问Nacos服务端‌3。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月14日
  • 已采纳回答 10月6日
  • 创建了问题 10月5日