之前的文章中我们介绍了如何使用TarsGo创建HTTP服务和TARS RPC服务,本篇文章中,我们将介绍如何在TarsGo服务中获得自定义模板的配置值。
TARS 框架中,有两种可以称之为 “配置” 的地方:其中一个是可以自定义的,在 TARS 管理页面中称为 服务配置。在这里,可以按照开发者喜欢的格式上传文件,并且支持配置的热更新。
而另一个地方,则是本文要讲的。这个在 TARS 中称为 “模版”。模版可以在 TARS 管理平台顶部的 “运维管理” 进去后,再进入 模版管理 可以看到。
查看下面那些已有的模版可以看到,一般而言,模版是用于对整个服务的参数进行配置,其配置项更加偏向运维,而不是偏业务。
TarsGo 服务一般使用 tars.go.default 模板。目前tars.go.default模板各节点的属性为空,从上节图中的模板列表中可以看到,这个模板的父模板为tars.default,各节点的属性值会从父模板中继承。通过模板继承,后续如果需要为TarsGo单独添加特定配置,能够更加方便。
我们来查看tars.default模板的内容,可以看到如下:
上面这些就是 TARS 平台中固定配置的一些参数。在 TarsGo 中,我们可以以如下语句来读取:
说明如下:
获取 <server> 下的配置总项,也就是对应着配置的 “域” 为 tars/application/server 获取 <server> 下的 app 和 server 值 但是上面代码的 app 和 server 都是预定义值,如果我们额外添加了一个键值对,那么用这个方法就没法读到了。
这里需要提一下如何自定义模版配置。我们点击 TARS 管理平台的 服务管理,再点击具体的服务,比如这里我拿之前的例子中用到的 GoWebServer 为例,点击具体服务,然后在 服务管理 tab 中,在指定的服务点 编辑:
在弹出来的对话框中,拉到最下方,在 私有模板 中可以配置自己的值。如果配置了与默认模版相同的 key,TARS则会将值替换为这里所配置的私有模板值。可以看到在图中我覆盖修改了远程日志的服务器。
TarsGo 获取模版的原理
这里其实我们只要看一下 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 封装了一个简易的包来读取自定义的模版,安装如下:
比如我自定义了以下私有模版:
那么在服务启动时我就可以这样去读取:
命令行输出:
这就成功读到自定义的配置值啦。其中对于每一个 `GetXxx()` 函数,都可以传入三个参数:
1. 第一个参数为 `domain`,也就是前文提到的 “域” 名
2. 第二个参数为 `key`,指的是指定域下键值对的键名
3. 第三个参数可选,可以不传;如果传递了第三个参数的话,那么当 `exist` 为 `false` 的时候,接口会将该值作为默认值,赋给返回值,开发者可以用来节省一些代码操作。
需要注意的是,其中 `myErrorInt` 的值尽管是存在的,但是由于无法解析为数字,因此 `GetInt()` 函数返回的 `exist` 结果为 `false`。
TARS可以在考虑到易用性和高性能的同时快速构建系统并自动生成代码,帮助开发人员和企业以微服务的方式快速构建自己稳定可靠的分布式应用,从而令开发人员只关注业务逻辑,提高运营效率。多语言、敏捷研发、高可用和高效运营的特性使 TARS 成为企业级产品。
TARS基金会是Linux基金会下的非营利性、微服务基金会,致力于建设一个强大而灵活的微服务生态系统。无论你在哪个行业,无论你使用什么技术栈,这里能助你快速实现你的创意。