/** * Tencent is pleased to support the open source community by making Tars available. * * Copyright (C) 2016THL A29 Limited, a Tencent company. All rights reserved. * * Licensed under the BSD 3-Clause License (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * https://opensource.org/licenses/BSD-3-Clause * * Unless required by applicable law or agreed to in writing, software distributed * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR * CONDITIONS OF ANY KIND, either express or implied. See the License for the * specific language governing permissions and limitations under the License. */ #include "RegistryServer.h" extern TC_Config *g_pconf; void RegistryServer::initialize() { TLOGDEBUG("RegistryServer::initialize..." << endl); try { //加载registry对象的端口信息 loadServantEndpoint(); //ReapThread初始化时会用到 TarsTimeLogger::getInstance()->initFormat("group_id", "%Y%m%d%H"); TarsTimeLogger::getInstance()->enableRemote("group_id", true); //全量和增量加载路由信息的线程 _reapThread.init(); _reapThread.start(); //检查node超时的线程 _checkNodeThread.init(); _checkNodeThread.start(); //监控所有服务状态的线程 _checksetingThread.init(); _checksetingThread.start(); //异步处理线程 _registryProcThread = new RegistryProcThread(); int num = TC_Common::strto(g_pconf->get("/tars/reap", "3")); _registryProcThread->start(num); //供node访问的对象 addServant((*g_pconf)["/tars/objname"]); //供tars的服务获取路由的对象 addServant((*g_pconf)["/tars/objname"]); TarsTimeLogger::getInstance()->enableRemote("", false); TarsTimeLogger::getInstance()->initFormat("query_set", "%Y%m%d%H"); TarsTimeLogger::getInstance()->enableRemote("query_set", false); TarsTimeLogger::getInstance()->initFormat("query_idc", "%Y%m%d%H"); TarsTimeLogger::getInstance()->enableRemote("query_idc", false); TarsTimeLogger::getInstance()->initFormat("query", "%Y%m%d%H"); TarsTimeLogger::getInstance()->enableRemote("query", false); } catch (TC_Exception& ex) { TLOGERROR("RegistryServer initialize exception:" << ex.what() << endl); cerr << "RegistryServer initialize exception:" << ex.what() << endl; exit(-1); } TLOGDEBUG("RegistryServer::initialize OK!" << endl); } void RegistryServer::destroyApp() { if (_registryProcThread) { _registryProcThread->terminate(); } TLOGDEBUG("RegistryServer::destroyApp ok" << endl); } RegistryProcThread* RegistryServer::getRegProcThread() { return _registryProcThread.get(); } int RegistryServer::loadServantEndpoint() { map mapAdapterServant = ServantHelperManager::getInstance()->getAdapterServant(); map::iterator iter; for (iter = mapAdapterServant.begin(); iter != mapAdapterServant.end(); iter++) { TC_Endpoint ep = getEpollServer()->getBindAdapter(iter->first)->getEndpoint(); _mapServantEndpoint[iter->second] = ep.toString(); TLOGDEBUG("registry obj: " << iter->second << " = " << ep.toString() << endl); } return 0; } TC_Endpoint RegistryServer::getAdapterEndpoint(const string& name) const { TC_Endpoint locator; try { locator = getEpollServer()->getBindAdapter(name)->getEndpoint(); } catch (exception& ex) { TLOGERROR("RegistryServer::getAdapterEndpoint exception: " << ex.what() << endl); } return locator; }