Tars源码解析一

本文是对Tars v1.03版本的源码解析,主要聚焦于Server端的配置和代码分析。介绍了Server配置,如Application、ServerName等,并详细解析了Server端的代码结构,包括AppContainer、Container接口、AppContext及其相关组件。讨论了Tars设计中一个端口对应一个接口的限制,并提出了相关疑问。
摘要由CSDN通过智能技术生成

Tars源码解析(一)

背景

接手的服务治理底层是依赖tars的,不过只是对tars做了二次开发,所以需要对tars的源码做一定的了解
tars的版本现在已经到v1.5版本
此分析是用的v1.03版本
具体版本是

https://github.com/Tencent/Tars/tree/508de1d5b664106e9b435eda0c478a9427128edb

Server端

阅读这类源码首先得理解他的配置功能,我们首先来看下Server端的配置

配置

  1. 暴露服务的配置(以XML为例 servants.xml)
<?xml version="1.0" encoding="UTF-8"?>
<servants>
    <servant name="HelloObj" >
        <home-api>com.qq.tars.quickstart.server.testapp.HelloServant</home-api>
        <home-class>com.qq.tars.quickstart.server.testapp.impl.HelloServantImpl</home-class>
    </servant>
</servants>

其实例子里给的属性不全,还有,属性
这个配置主要配置暴露出去的服务

  1. 整个服务的配置(ServerConfig)
<tars>
  <application>
    enableset=n
    setdivision=NULL
    <server>
       #本地node的ip:port
       node=tars.tarsnode.ServerObj@tcp -h x.x.x.x -p 19386 -t 60000
       #应用名称
       app=TestApp
       #服务名称
       server=HelloServer
       #本机ip
       localip=x.x.x.x
       #管理端口
       local=tcp -h 127.0.0.1 -p 20001 -t 3000
       #服务可执行文件,配置文件等
       basepath=/usr/local/app/tars/tarsnode/data/TestApp.HelloServer/bin/
       #服务数据目录
       datapath=/usr/local/app/tars/tarsnode/data/TestApp.HelloServer/data/
       #日志路径
       logpath=/usr/local/app/tars/app_log/
       #配置中心的地址
       config=tars.tarsconfig.ConfigObj
       #通知上报的地址[可选]
       notify=tars.tarsnotify.NotifyObj
       #远程日志的地址[可选]
       log=tars.tarslog.LogObj
       #服务停止的超时时间
       deactivating-timeout=2000
       #日志等级
       logLevel=DEBUG
        #配置绑定端口
       <TestApp.HelloServer.HelloObjAdapter>
            #允许的IP地址
            allow
            #监听IP地址
            endpoint=tcp -h x.x.x.x -p 20001 -t 60000
            #处理组
            handlegroup=TestApp.HelloServer.HelloObjAdapter
            #最大连接数
            maxconns=200000
            #协议
            protocol=tars
            #队列大小
            queuecap=10000
            #队列超时时间毫秒
            queuetimeout=60000
            #处理对象
            servant=TestApp.HelloServer.HelloObj
            #当前线程个数
            threads=5
       </TestApp.HelloServer.HelloObjAdapter>
    </server>
    <client>
       #主控的地址
       locator=tars.tarsregistry.QueryObj@tcp -h x.x.x.x -p 17890
       #同步超时时间
       sync-invoke-timeout=3000
       #异步超时时间
       async-invoke-timeout=5000
       #刷新ip列表的时间间隔
       refresh-endpoint-interval=60000
       #上报数据的时间间隔
       report-interval=60000
       #采样率
       sample-rate=100000
       #最大采样数
       max-sample-count=50
       #模版名称
       modulename=TestApp.HelloServer
    </client>
  </application>
</tars>

其中大的配置项:

  • Application:应用名称,如果配置文件没有配置,默认为UNKNOWN;
  • ServerName:服务名称;
  • BasePath:基本路径,通常表示可执行文件的路径;
  • DataPath:数据文件路径,通常表示存在服务自己的数据;
  • LocalIp:本地ip,默认是本机非127.0.0.1的第一块网卡IP;
  • LogPath:日志文件路径,日志的写法请参考后续;
  • LogLevel:滚动log日志级别;
  • Local:服务可以有管理端口,可以通过管理端口发送命令给服务,该参数表示绑定的管理端口的地址,例如tcp -h 127.0.0.1 -p 8899,如果没有设置则没有管理端口;
  • Node:本地NODE地址,如果设置,则定时给NODE发送心跳,否则不发送心跳,通常只有发布到框架上面的服务才有该参数;
  • Log:日志中心地址,例如:tars.tarslog.LogObj@tcp –h .. –p …,如果没有配置,则不记录远程日志;
  • Config:配置中心地址,例如:tars.tarsconfig.ConfigObj@tcp –h … -p …,如果没有配置,则addConfig函数无效,无法从远程配置中心拉取配置;
  • Notify:信息上报中心地址,例如:tars.tarsnotify.NotifyObj@tcp –h … -p …,如果没有配置,则上报的信息直接丢弃;
  • SessionTimeOut:防空闲连接超时设置;
  • SessionCheckInterval:防空闲连接超时检查周期;
  • Adapter表示了绑定端口。服务新增一个绑定端口,则新建立一个Adapter,并设置相关的参数和处理对象则可以非常方便的完成对这个端口上的处理,通常用这个功能来完成在其他协议的支撑。
    对于TARS服务而言,在服务配置文件中增加adapter项,即可以完成增加一个Servant处理对象。

代码分析

组件构成

目录名称 功能
net 框架rpc网络库
core 框架rpc的实现
tools 框架工具的实现,maven插件等
examples 框架的示例代码
distributedContext 框架的分布式上下文
protobuf 框架的pb协议支持
spring 框架的spring支持

代码入口

package com.qq.tars.server.startup;

import com.qq.tars.server.core.Server;

public class Main {
   

    public static void main(String[] args) {
        new Server().st
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值