获取默认值_TarsGo 服务获取自定义模版(配置)值
发布日期:2021-06-24 12:16:31 浏览次数:2 分类:技术文章

本文共 1879 字,大约阅读时间需要 6 分钟。

dd9a15ceece10b58710b4240dbbb1f14.gif

之前的文章中我们介绍了如何使用 TarsGo创建HTTP服务 和 TARS RPC服务 ,本篇文章中,我们将介绍如何在TarsGo 服务中获得自定义模板的配置值。

07fa376cc7c70967622ca9d5657c45fc.png

TARS 框架中,有两种可以称之为 “配置” 的地方:其中一个是可以自定义的,在 TARS 管理页面中称为 服务配置。在这里,可以按照开发者喜欢的格式上传文件,并且支持配置的热更新。
4038e88416cfe26347af0c41daa81342.png

而另一个地方,则是本文要讲的。这个在 TARS 中称为 “模版”。模版可以在 TARS 管理平台顶部的 “运维管理” 进去后,再进入 模版管理 可以看到。

74b998b70dd4962de99892d35213dcfa.png

查看下面那些已有的模版可以看到,一般而言,模版是用于对整个服务的参数进行配置,其配置项更加偏向运维,而不是偏业务。

39524b503e4208f0c1ec6df739142f59.png

TarsGo 服务一般使用 tars.go.default 模板。目前tars.go.default模板各节点的属性为空,从上节图中的模板列表中可以看到,这个模板的父模板为tars.default,各节点的属性值会从父模板中继承。通过模板继承,后续如果需要为TarsGo单独添加特定配置,能够更加方便。

我们来查看tars.default模板的内容,可以看到如下:

3abea7f0be4b0dad16b6260e0cc478dc.png

上面这些就是 TARS 平台中固定配置的一些参数。在 TarsGo 中,我们可以以如下语句来读取:

d5f3207b856a6b4f09faa723a00e8271.png

说明如下: 获取  下的配置总项,也就是对应着配置的 “域” 为 tars/application/server 获取  下的 app 和 server 值 但是上面代码的 app 和 server 都是预定义值,如果我们额外添加了一个键值对,那么用这个方法就没法读到了。

f7132e3e49bce163b7d8328ba745c120.png

这里需要提一下如何自定义模版配置。我们点击 TARS 管理平台的 服务管理,再点击具体的服务,比如这里我拿之前的例子中用到的 GoWebServer 为例,点击具体服务,然后在 服务管理 tab 中,在指定的服务点 编辑:

ad44acac48028494aa3b8d6b2a582e0d.png

在弹出来的对话框中,拉到最下方,在 私有模板 中可以配置自己的值。如果配置了与默认模版相同的 key,TARS则会将值替换为这里所配置的私有模板值。可以看到在图中我覆盖修改了远程日志的服务器。
bd47ab1ac463d6e16c612a8f9f65ee02.png

26ad7114dbdf109c1cea223fa8b09f7a.png

TarsGo 获取模版的原理

这里其实我们只要看一下 TarsGo 的代码,从 GetServerConfig() 函数(文件是 config.go)往里看。函数调用了 Init(),而这个函数又调用了 initConfig() 函数(文件是 application.go)。该函数的逻辑很清晰,就是利用 github.com/TarsCloud/TarsGo/tars/util/conf 包来解析模版文件的内容。 解析模版条件的基本逻辑是: 如果遇到一个 xml 属性,比如 ...,那么这个属性下本身会被存储为一个 Go map[string]string 类型,下面保存以 key = value 格式存储的键值对信息 因此,我们就可以利用这个 util 包,来获取解析到的原始配置值了

获取模版配置值封装

为了便于使用,我基于 github.com/TarsCloud/TarsGo/tars/util/conf 封装了一个简易的包来读取自定义的模版,安装如下:

814b044b1dd6ffd5aedecc6a57a088a3.png

比如我自定义了以下私有模版:

3c4178e286fb45b9f438d47fd35aa630.png

那么在服务启动时我就可以这样去读取:

ccd9e8e0f7ffbabbe67c47cc83a0c505.png

命令行输出:

65dd32f4c8c733d8f35dc51f5f4e3e03.png

这就成功读到自定义的配置值啦。其中对于每一个 `GetXxx()` 函数,都可以传入三个参数:

1. 第一个参数为 `domain`,也就是前文提到的 “域” 名 2. 第二个参数为 `key`,指的是指定域下键值对的键名 3. 第三个参数可选,可以不传;如果传递了第三个参数的话,那么当 `exist` 为 `false` 的时候,接口会将该值作为默认值,赋给返回值,开发者可以用来节省一些代码操作。

需要注意的是,其中 `myErrorInt` 的值尽管是存在的,但是由于无法解析为数字,因此 `GetInt()` 函数返回的 `exist` 结果为 `false`。

4bd06cb715d456bea5901527d3451002.png

TARS可以在考虑到易用性和高性能的同时快速构建系统并自动生成代码,帮助开发人员和企业以微服务的方式快速构建自己稳定可靠的分布式应用,从而令开发人员只关注业务逻辑,提高运营效率。多语言、敏捷研发、高可用和高效运营的特性使 TARS 成为企业级产品。

TARS基金会是Linux基金会下的非营利性、微服务基金会,致力于建设一个强大而灵活的微服务生态系统。无论你在哪个行业,无论你使用什么技术栈,这里能助你快速实现你的创意。

7d2801b28c02ee65b255b520ccb5c07c.png

f1dbf7eb9a9e3e0c63ff3a66b5f3373e.png


5a15a371b310cedcad92d47ee9ffb1e7.gif

79cc021f0a030ff6a6388e070eeeaf29.png

d5a614ff98adb74e7a8e06e46d8eb288.png

点“在看”让TARS小姐姐变好看934b1e8dc799ef7923c8851b44443b94.gif

6a851bfd9d7eda90bc586232cebdc14c.png

转载地址:https://blog.csdn.net/weixin_32667439/article/details/112634737 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:启动rocketmq_rocketmq 部署启动指南-Docker 版
下一篇:线上banner什么意思_广交会线上直播怎么做

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月09日 04时38分30秒