TarsGo 服务获取自定义模版(配置)值

Easter79
• 阅读 617

TarsGo 服务获取自定义模版(配置)值

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

TarsGo 服务获取自定义模版(配置)值

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

TarsGo 服务获取自定义模版(配置)值

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

TarsGo 服务获取自定义模版(配置)值

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

TarsGo 服务获取自定义模版(配置)值

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

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

TarsGo 服务获取自定义模版(配置)值

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

TarsGo 服务获取自定义模版(配置)值

说明如下:

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

TarsGo 服务获取自定义模版(配置)值

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

TarsGo 服务获取自定义模版(配置)值

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

TarsGo 服务获取自定义模版(配置)值

TarsGo 服务获取自定义模版(配置)值

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 封装了一个简易的包来读取自定义的模版,安装如下:

TarsGo 服务获取自定义模版(配置)值

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

TarsGo 服务获取自定义模版(配置)值

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

TarsGo 服务获取自定义模版(配置)值

命令行输出:

TarsGo 服务获取自定义模版(配置)值

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

1. 第一个参数为 `domain`,也就是前文提到的 “域” 名

2. 第二个参数为 `key`,指的是指定域下键值对的键名

3. 第三个参数可选,可以不传;如果传递了第三个参数的话,那么当 `exist` 为 `false` 的时候,接口会将该值作为默认值,赋给返回值,开发者可以用来节省一些代码操作。

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

TarsGo 服务获取自定义模版(配置)值

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


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

TarsGo 服务获取自定义模版(配置)值

TarsGo 服务获取自定义模版(配置)值


TarsGo 服务获取自定义模版(配置)值

TarsGo 服务获取自定义模版(配置)值

TarsGo 服务获取自定义模版(配置)值

点“在看”让TARS小姐姐变好看TarsGo 服务获取自定义模版(配置)值

TarsGo 服务获取自定义模版(配置)值

本文分享自微信公众号 - TARS星球(TarsCloud)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
待兔 待兔
11个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Stella981 Stella981
3年前
Js和Thymeleaf如何获取model中的值
简述在大多数的项目架构中,使用SPringBoot发布微服务,前端采用Thymeleaf作为Html模版,使用Jquery作为动态脚本,那么Thymeleaf和Jquery是如何获取Model中的数据呢?Jquery获取Model中的数据方法1:将model中的值赋给hidden,然后Js获取隐藏域的值。
Stella981 Stella981
3年前
Spring MVC 原理探秘:容器的创建过程
转载自:田小波的博客(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Ftianxiaobo.com%2F)1.简介在上一篇文章中,我向大家介绍了SpringMVC是如何处理HTTP请求的。SpringMVC可对外提供服务时,说明其已经处于了就绪状态。再次之前
Wesley13 Wesley13
3年前
P2P技术揭秘.P2P网络技术原理与典型系统开发
Modular.Java(2009.06)\.Craig.Walls.文字版.pdf:http://www.t00y.com/file/59501950(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.t00y.com%2Ffile%2F59501950)\More.E
Stella981 Stella981
3年前
Dubbo+zookeeper构建高可用分布式集群(二)
在Dubbozookeeper构建高可用分布式集群(一)单机部署(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.cnblogs.com%2Fbarrywxx%2Fp%2F8546203.html)中我们讲了如何单机部署。但没有将如何配置微服务。下面分别介绍单机与集群微服务如何
Easter79 Easter79
3年前
TarsGo 服务 Hello World——RPC 通信
!banner(https://wx2.sbimg.cn/2020/07/31/PvlHA.jpg)作者:amc引言:上一篇文章(https://my.oschina.net/u/4021301/blog/4462052)介绍了如何创建安装TarsGo,同时也阐述了如何开始一个TarsGoHTTP服务。本文就要开始TarsGo的主
Wesley13 Wesley13
3年前
MySQL 的慢 SQL 怎么优化?
!(https://oscimg.oschina.net/oscnet/7b00ec583b5e42cc80e8c56c6556c082.jpg)Java技术栈www.javastack.cn关注阅读更多优质文章(https://www.oschina.net/action/GoToLink?urlhttp
Easter79 Easter79
3年前
Swift项目兼容Objective
!456.jpg(http://static.oschina.net/uploads/img/201509/13172704_1KcG.jpg"1433497731426906.jpg")本文是投稿文章,作者:一叶(博客(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2F00red
Stella981 Stella981
3年前
Google地球出现“无法连接到登录服务器(错误代码:c00a0194)”解决方法
Google地球出现“无法连接到登录服务器(错误代码:c00a0194)”解决方法参考文章:(1)Google地球出现“无法连接到登录服务器(错误代码:c00a0194)”解决方法(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.codeprj.com%2Fblo
Stella981 Stella981
3年前
Jenkins 插件开发之旅:两天内从 idea 到发布(上篇)
本文首发于:Jenkins中文社区(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fjenkinszh.cn)!huashan(https://oscimg.oschina.net/oscnet/f499d5b4f76f20cf0bce2a00af236d10265.jpg)
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
6
获赞
1.2k