TARS 服务优雅关闭

本文详细介绍了TARS框架下服务的优雅关闭过程,包括AdminRegistryServer如何通知NodeServer,以及服务Admin接口AdminFServantImpl的shutdown方法。通过分析源码,提出通过设置服务关闭脚本和deactivating-timeout,确保服务在客户端刷新周期内继续提供服务,从而实现优雅关闭。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

TARS 服务优雅关闭

 

TARS是腾讯开源的微服务调用框架,框架基础设施(RegistryServerNodeServerConfigServer)是由C++编写,框架上的微服务支持C++、Java、Go等。在众多介绍TARS的使用文章中都是介绍服务的开发及部署,没有文章介绍服务如何进行优雅关闭,优雅关闭对于生产环境尤为重要,不支持优雅关闭将在服务升级或服务实例调整时对业务产生影响。本文将讲通过分析TARS框架源码介绍一种实现优雅关闭的方式。

 

TARS服务关闭逻辑

AdminRegistryServer

WEB调用AdminRegistryServer的stopServer方法停止服务,stopServer代码比较简单概括说此方法做了两件事:

  1. 更新数据库服务状态(RegistryServer查询服务数据库)
  2. 通知tarsnode关闭服务,stopServer方法

 

NodeServer

NodeServer是结束进程的实施者,AdminRegistryServer通过调用NodeServer接口方法stopServer关闭服务,在stopServer中由CommandStop类来处理具体的服务进程停止操作,我们看一下CommandStop的核心方法executor的源代码:

int CommandStop::execute(string& sResult)

{

    bool needWait = false;

    ...........

        string sStopScript   = _serverObjectPtr->getStopScript();

        //配置了脚本或者非tars服务

        if( TC_Common::lower(TC_Common::trim(_desc.serverType)) == "tars_php" ){

            生成停止shell脚本 

            ...............

           

 

        }else if (!sStopScript.empty() || _serverObjectPtr->isTarsServer() == false) {

            如果设置了停止脚本,则运行启动脚本

            map<string, string> mResult;

            _serverObjectPtr->getActivator()->doScript(sStopScript, sResult, mResult);

            设置需要等待

            needWait = true

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值