做者:amcgit
导语:以前的文章中咱们介绍了如何使用TarsGo建立HTTP服务和TARS RPC服务,本篇文章中,咱们将介绍如何在TarsGo服务中得到自定义模板的配置值。github
TARS 框架中,有两种能够称之为 “配置” 的地方:其中一个是能够自定义的,在 TARS 管理页面中称为 服务配置
。在这里,能够按照开发者喜欢的格式上传文件,而且支持配置的热更新。segmentfault
而另外一个地方,则是本文要讲的。这个在 TARS 中称为 “模版”。模版能够在 TARS 管理平台顶部的 “运维管理” 进去后,再进入 模版管理
能够看到。服务器
查看下面那些已有的模版能够看到,通常而言,模版是用于对整个服务的参数进行配置,其配置项更加偏向运维,而不是偏业务。网络
TarsGo 服务通常使用 tars.go.default
模板。目前tars.go.default
模板各节点的属性为空,从上节图中的模板列表中能够看到,这个模板的父模板为tars.default
,各节点的属性值会从父模板中继承。经过模板继承,后续若是须要为TarsGo单独添加特定配置,可以更加方便。app
咱们来查看tars.default
模板的内容,能够看到以下:框架
<tars> <application> enableset=${enableset} #是否启用SET分组 setdivision=${setdivision} #SET分组的全名.(mtt.s.1) <client> locator =${locator} #地址 sync-invoke-timeout = 3000 #同步调用超时时间,缺省3s(毫秒) async-invoke-timeout =5000 #异步超时时间,缺省5s(毫秒) refresh-endpoint-interval = 60000 #从新获取服务列表时间间隔(毫秒) stat = tars.tarsstat.StatObj #模块间调用服务[可选] property = tars.tarsproperty.PropertyObj #属性上报服务[可选] report-interval = 60000 #上报间隔时间,默认60s(毫秒) asyncthread = ${asyncthread} #网络异步回调线程个数 modulename = ${modulename} #模块名称 </client> <server> app = ${app} #应用名称 server = ${server} #服务名称 localip = ${localip} #本地ip local = ${local} #本地管理套接字[可选] basepath = ${basepath} #服务的数据目录,可执行文件,配置文件等 datapath = ${datapath} logpath = ${logpath} #日志路径 logsize = 10M #日志大小 lognum = 10 #日志数量 logLevel=DEBUG #滚动日志等级默认值 config = tars.tarsconfig.ConfigObj #配置中心的地址[可选] notify = tars.tarsnotify.NotifyObj #信息中心的地址[可选] log = tars.tarslog.LogObj #远程LogServer[可选] deactivating-timeout = 3000 #关闭服务时等待时间 </server> </application> </tars>
上面这些就是 TARS 平台中固定配置的一些参数。在 TarsGo 中,咱们能够以以下语句来读取:运维
import ( "github.com/TarsCloud/TarsGo/tars" ) func main() { cfg := tars.GetServerConfig() // 1 server := cfg.App + "." + cfg.Server // 2 ... }
说明以下:dom
获取 <server>
下的配置总项,也就是对应着配置的 “域” 为 tars/application/server
获取 <server>
下的 app
和 server
值
可是上面代码的 app
和 server
都是预约义值,若是咱们额外添加了一个键值对,那么用这个方法就无法读到了。异步
这里须要提一下如何自定义模版配置。咱们点击 TARS 管理平台的 服务管理
,再点击具体的服务,好比这里我拿以前的例子中用到的 GoWebServer
为例,点击具体服务,而后在 服务管理
tab 中,在指定的服务点 编辑
:
在弹出来的对话框中,拉到最下方,在 私有模板
中能够配置本身的值。若是配置了与默认模版相同的 key,TARS则会将值替换为这里所配置的私有模板值。能够看到在图中我覆盖修改了远程日志的服务器。
这里其实咱们只要看一下 TarsGo 的代码,从 GetServerConfig()
函数(文件是 config.go
)往里看。函数调用了 Init()
,而这个函数又调用了 initConfig()
函数(文件是 application.go
)。该函数的逻辑很清晰,就是利用 github.com/TarsCloud/TarsGo/tars/util/conf
包来解析模版文件的内容。
解析模版条件的基本逻辑是:
若是遇到一个 xml 属性,好比 <server>...</server>
,那么这个属性下自己会被存储为一个 Go map[string]string
类型,下面保存以 key = value
格式存储的键值对信息
所以,咱们就能够利用这个 util
包,来获取解析到的原始配置值了
为了便于使用,我基于 github.com/TarsCloud/TarsGo/tars/util/conf
封装了一个简易的包来读取自定义的模版,安装以下:
go get github.com/Andrew-M-C/tarsgo-tools/config
好比我自定义了如下私有模版:
<tars> <application> <server> myStr=This is a string myInt=54321 myLong=12345 myErrorInt=abcde </server> </application> </tars>
那么在服务启动时我就能够这样去读取:
import ( "github.com/Andrew-M-C/tarsgo-tools/config" ) func main() { tarsconf, err := config.NewConfig() if err != nil { fmt.Println("Failed to get config: " + err.Error()) } else { myStr, exist := tarsconf.GetString("/tars/application/server", "myStr", "WHAT?") fmt.Printf("%t, myStr: %s\n", exist, myStr) myInt, exist := tarsconf.GetInt("/tars/application/server", "myInt") fmt.Printf("%t, myInt: %d\n", exist, myInt) myInt2, exist := tarsconf.GetInt("/tars/application/server", "myInt2", -2) fmt.Printf("%t, myInt2: %d\n", exist, myInt2) myLong, exist := tarsconf.GetLong("/tars/application/server", "myLong", -3) fmt.Printf("%t, myLong: %d\n", exist, myLong) myErrorInt, exist := tarsconf.GetInt("/tars/application/server", "myInt", -4) fmt.Printf("%t, myErrorInt: %d\n", exist, myErrorInt) } return }
命令行输出:
true, myStr: This is a string true, myInt: 54321 false, myInt2: -2 true, myLong: 12345 false, myErrorInt: -4
这就成功读到自定义的配置值啦。其中对于每个 GetXxx()
函数,均可以传入三个参数:
domain
,也就是前文提到的 “域” 名key
,指的是指定域下键值对的键名exist
为 false
的时候,接口会将该值做为默认值,赋给返回值,开发者能够用来节省一些代码操做。须要注意的是,其中 myErrorInt
的值尽管是存在的,可是因为没法解析为数字,所以 GetInt()
函数返回的 exist
结果为 false
。
TARS能够在考虑到易用性和高性能的同时快速构建系统并自动生成代码,帮助开发人员和企业以微服务的方式快速构建本身稳定可靠的分布式应用,从而令开发人员只关注业务逻辑,提升运营效率。多语言、敏捷研发、高可用和高效运营的特性使 TARS 成为企业级产品。
TARS微服务助您数字化转型,欢迎访问:
TARS官网:https://TarsCloud.org
TARS源码:https://github.com/TarsCloud
获取《TARS官方培训电子书》:https://wj.qq.com/s2/6570357/...
或扫码获取:
原文连接:https://cloud.tencent.com/developer/article/1394093
原文标题:《腾讯 Tars-Go 服务获取自定义模版(配置)值》
发布日期:2019 年 2 月 21 日
发布平台:云+社区