前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >腾讯 Tars-Go 服务获取自定义模版(配置)值

腾讯 Tars-Go 服务获取自定义模版(配置)值

原创
作者头像
amc
修改于 2019-02-21 13:47:34
修改于 2019-02-21 13:47:34
3K0
举报
文章被收录于专栏:后台全栈之路后台全栈之路

Tars 模版是什么?

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

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

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

Tars 模版的内容

TarsGo 服务一般使用 tars.default 模板。查看这个模板的内容,可以看到如下:

代码语言:txt
AI代码解释
复制
<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(毫秒)
            sample-rate = 100000	#stat采样比1:n 例如sample-rate为1000时 采样比为千分之一
            max-sample-count = 50	#1分钟内stat最大采样条数
            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			#日志数量
            config  = tars.tarsconfig.ConfigObj	#配置中心的地址[可选]
            notify  = tars.tarsnotify.NotifyObj	#信息中心的地址[可选]
            log = tars.tarslog.LogObj			#远程LogServer[可选]
            deactivating-timeout = 3000			#关闭服务时等待时间
            logLevel=DEBUG						#滚动日志等级默认值
        </server>          
    </application>
</tars>

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

代码语言:txt
AI代码解释
复制
import (
	"github.com/TarsCloud/TarsGo/tars"
)

func main() {
    cfg := tars.GetServerConfig()			// 1
	server := cfg.App + "." + cfg.Server	// 2
    
    ...
}

说明如下:

  1. 获取 <server> 下的配置总项,也就是对应着配置的 “域” 为 "tars/application/server"
  2. 获取 <server> 下的 appserver

但是上面代码的 appserver 都是预定义值,如果我们额外添加了一个键值对,那么用这个方法就没法读到了。

自定义模版配置

这里需要提一下如何自定义模版配置。我们点击 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 封装了一个简易的包来读取自定义的模版,安装如下:

代码语言:txt
AI代码解释
复制
$ go get github.com/Andrew-M-C/tarsgo-tools/config

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

代码语言:txt
AI代码解释
复制
<tars>
    <application>
        <server>
			      myStr=This is a string
            myInt=54321
            myLong=12345
            myErrorInt=abcde
        </server>
    </application>
</tars>

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

代码语言:txt
AI代码解释
复制
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
}

命令行输出:

代码语言:txt
AI代码解释
复制
true, myStr: This is a string
true, myInt: 54321
false, myInt2: -2
true, myLong: 12345
false, myErrorInt: -4

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

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

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


本文章采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。

原作者: amc,欢迎转载,但请按上述协议注明出处。

原文链接:https://cloud.tencent.com/developer/article/1394093

原文标题:《腾讯 Tars-Go 服务获取自定义模版(配置)值》

发布日期:2019 年 2 月 21 日

发布平台:云+社区

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
TarsGo 服务获取自定义模版(配置)值
之前的文章中我们介绍了如何使用TarsGo创建HTTP服务和TARS RPC服务,本篇文章中,我们将介绍如何在TarsGo服务中获得自定义模板的配置值。
TARS基金会
2020/10/23
7660
腾讯 Tars-Go 服务 Hello World——从 HTTP 开始
Tars 框架最新的版本已经把内部的 Taf-Go 开源为 Tars-Go。作为与时俱进的程序员,当然要尝鲜啦。
amc
2019/01/06
13.1K9
腾讯 Tars-Go 服务 Hello World——从 HTTP 开始
腾讯 Tars-Go 服务 Hello World——RPC 通信
上一篇文章介绍了如何创建安装 TarsGo,同时也阐述了如何开始一个 Tars-Go HTTP 服务。本文就要开始 Tars-Go 的主力业务了:基于 Tars 自带的 rpc 协议,设计 Tars-Go 服务。
amc
2019/01/10
5.9K1
腾讯 Tars-Go 服务 Hello World——RPC 通信
TarsGo支持Protocol Buffer
Tars是腾讯从2008年到今天一直在使用的后台逻辑层的统一应用框架TAF(Total Application Framework),目前支持C++,Java,PHP,Nodejs,Golang语言。该框架为用户提供了涉及到开发、运维、以及测试的一整套解决方案,帮助一个产品或者服务快速开发、部署、测试、上线。 它集可扩展协议编解码、高性能RPC通信框架、名字路由与发现、发布监控、日志统计、配置管理等于一体,通过它可以快速用微服务的方式构建自己的稳定可靠的分布式应用,并实现完整有效的服务治理。目前该框架在腾讯内部,各大核心业务都在使用,颇受欢迎,基于该框架部署运行的服务节点规模达到上万个。
陈明杰
2018/10/10
2.8K0
TarsGo支持Protocol Buffer
腾讯 TarsGo 服务 Hello World——RPC 通信
上一篇文章(文末附链接)介绍了如何创建安装 TarsGo,同时也阐述了如何开始一个 TarsGo HTTP 服务。本文就要开始 TarsGo 的主力业务了:基于 TARS 自带的 RPC 协议,设计 TarsGo 服务。本文的内容大致思路与官方Quick Start (文末附链接)相同,但例子会有所不同,同时对于一些坑也会解释得详细点。本文的代码可以在我的 GitHub repo(文末附链接)中找到。
TARS基金会
2020/10/23
6960
TarsGo新版本发布,支持protobuf,zipkin和自定义插件
Tars是腾讯从2008年到今天一直在使用的后台逻辑层的统一应用框架,目前支持C++、Java、PHP、Nodejs、Golang语言。该框架为用户提供了涉及到开发、运维、以及测试的一整套解决方案,帮助一个产品或者服务快速开发、部署、测试、上线。 它集可扩展协议编解码、高性能RPC通信框架、名字路由与发现、发布监控、日志统计、配置管理等于一体,通过它可以快速用微服务的方式构建自己的稳定可靠的分布式应用,并实现完整有效的服务治理。目前该框架在腾讯内部,各大核心业务都在使用,颇受欢迎,基于该框架部署运行的服务节点规模达到上万个。
TARS小助手
2018/11/13
1.2K0
TarsGo新版本发布,支持protobuf,zipkin和自定义插件
腾讯 Tars 基础框架手动搭建——填掉官方 Guide 的坑
腾讯 Tars 是腾讯内部使用的 TAF(Tencent Application Framework)的对外开源版,去掉了许多冗杂多余的部分。该框架集开发、运维、微服务、RPC 等为一体。对程序员而言,这就是一个能够快速搭建整个微服务体系的开发框架。这个框架支持基于 C++、Node.js、PHP、Java 等语言开发,最新版本已经支持后台开发语言新贵——Go。
amc
2018/12/17
25.8K18
腾讯 Tars 基础框架手动搭建——填掉官方 Guide 的坑
TarsGo 服务 Hello World——从 HTTP 开始
在进行本文实践之前,需要先完成TARS架的搭建,参考TARS框架部署文档(文末附链接)。在我们的实际应用中,目前基于 TARS,主要采用 Node.js 和 C++ 进行开发。对于 C++ 程序员来说,目前最热门的后台开发语言莫过于 Google 的 Go。TARS 框架最新的版本已经把内部的 TafGo 开源为 TarsGo。作为与时俱进的程序员,当然要尝鲜啦。
TARS基金会
2020/10/23
7720
微服务开源框架TARS 之 框架服务解析
本文源自herman的系列文章之一《鹅厂开源框架TARS之运营服务监控》。相关代码已按TARS开源社区最新版本更新。
TARS基金会
2020/09/06
2.5K0
微服务开源框架TARS 之 框架服务解析
解读|TARS开源项目发布Go语言版本
导语:近日,Tars 开源项目在上海发布并开源了 Go 语言版本,其性能与 C++ 版本相当,比 gRPC 的性能高 5 倍。  ——编者 Tars 是腾讯开源的一款微服务框架,它于去年 4 月份开源,并于今年 6 月捐赠给了 Linux 基金会。Tars 为用户提供了涉及到开发和运维的一整套解决方案,帮助一个产品或者服务快速开发、发布、部署、上线和维护。它集可扩展协议编解码、高性能 RPC 通信框架、名字路由与发现、发布监控、日志统计、配置管理等于一体,通过它可以快速用微服务的方式构建稳定可靠的分布式
腾讯开源
2018/10/12
3.1K0
解读|TARS开源项目发布Go语言版本
程序常用配置文件格式介绍
不管是移动应用、桌面程序还是后台服务,经常需要从配置文件中读取配置信息,进行程序初始化和改变运行时的状态。以什么要的格式来存储配置信息,这是开发人员需要面临的一个问题。常用的配置文件格式主要有:
恋喵大鲤鱼
2022/05/09
3.4K0
程序常用配置文件格式介绍
Vue 自定义轮播
划分标题、轮播区、指示点三块,在轮播区使用 display: inline-block; ​使子元素横向排列,
我不是费圆
2022/11/02
4060
Vue 自定义轮播
微服务开源框架TARS的RPC源码解析 之 初识TARS C++客户端
导语:微服务开源框架TARS的RPC调用包含客户端与服务端,《微服务开源框架TARS的RPC源码解析》系列文章将从初识客户端、客户端的同步及异步调用、初识服务端、服务端的工作流程四部分,以C++语言为载体,深入浅出地带你了解TARS RPC调用的原理。
TARS基金会
2020/07/08
2.3K0
微服务开源框架TARS的RPC源码解析 之 初识TARS C++客户端
夜莺自定义告警模板
要实现上面的需求很简单,夜莺监控的数据库表alert_cur_event保存了我们所需要的当前未处理的告警总数,而且夜莺监控也提供了查询未处理告警的面板,而对于告警恢复时候的值我们只需要根据自定义的恢复promql即可查询。
没有故事的陈师傅
2023/09/06
1K0
夜莺自定义告警模板
spring整合各种RPC框架(netty、dubbo、dubbox、gRPC、Motan、Tars)-续(Tars)
接上文:spring整合各种RPC框架(netty、dubbo、dubbox、gRPC、Motan)-续(Motan)
逍遥壮士
2021/03/23
2.2K0
Go viper 配置文件读取工具
viper 提供默认 Viper对象, 可直接使用。 也通过 New 方法创建自定义Viper
copy_left
2020/08/11
1.9K0
微服务开源框架TARS的RPC源码解析 之 初识TARS C++服务端
导语:微服务开源框架TARS的RPC调用包含客户端与服务端,《微服务开源框架TARS的RPC源码解析》系列文章将从初识客户端、客户端的同步及异步调用、初识服务端、服务端的工作流程四部分,以C++语言为载体,深入浅出地带你了解TARS RPC调用的原理。
TARS基金会
2020/07/16
4.5K0
微服务开源框架TARS的RPC源码解析 之 初识TARS C++服务端
全面解读!Golang中泛型的使用
导语 | Golang在2022-03-15发布了V1.18正式版,里面包含了对泛型的支持,那么最新版本的泛型如何使用呢?有哪些坑呢?本文全面且详细的带你了解泛型在Golang中的使用。 一、什么是泛型 说起泛型这个词,可能有些人比较陌生,特别是PHP或者JavaScript这类弱语言的开发者,尤其陌生。因为在这些弱语言中,语法本身就是支持不同类型的变量调用的。可以说无形之中早已把泛型融入语言的DNA中了,以至于开发者习以为常了。 举个PHP中的泛型的例子: 我们定义了一个sum函数,参数是传入2个变量,返
腾讯云开发者
2022/06/24
8.7K2
全面解读!Golang中泛型的使用
Tars-Java网络编程源码分析
本文从Java NIO网络编程的基础知识讲到了Tars框架使用NIO进行网络编程的源码分析。
2020labs小助手
2023/03/20
4030
Go 语言微服务框架 Kratos 怎么读取配置?
微服务框架 Kratos 提供了一个强大的配置管理模块 - config 组件,它支持加载、解析、动态更新配置。
frank.
2025/01/13
2100
Go 语言微服务框架 Kratos 怎么读取配置?
相关推荐
TarsGo 服务获取自定义模版(配置)值
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档