做者:amchtml
导语:在进行本文实践以前,须要先完成TARS架的搭建,参考TARS框架部署文档。在咱们的实际应用中,目前基于 TARS,主要采用 Node.js 和 C++ 进行开发。对于 C++ 程序员来讲,目前最热门的后台开发语言莫过于 Google 的 Go。TARS 框架最新的版本已经把内部的 TafGo 开源为 TarsGo。做为与时俱进的程序员,固然要尝鲜啦。git
开发环境显然要安装好 Go 了。请注意的是,TarsGo 要求 Go 版本 1.9
以上。最新稳定版已是 1.14
了,安装最新版便可。
Go 安装好以后,请注意配置好 $GOPATH
和 $GOROOT
环境变量,建议配置为 $HOME/go
目录。尽管在 Go 1.8
以后,go
命令的运行已经再也不须要程序员配置上述变量(go 会自动配置,可执行 $ go env
查看),可是 TarsGo 的脚本在执行的时候仍是须要依赖。程序员
执行go
安装命令并编译:github
go get github.com/TarsCloud/TarsGo/tars cd $GOPATH/src/github.com/TarsCloud/TarsGo/tars/tools/tars2go && go build . sudo cp tars2go $GOPATH/bin/
上述命令会把 TarsGo 下载下来,而且将比较重要的一个命令 tars2go 安装好。同时须要注意cp命令目的路径参数最后的斜杆不要漏了,漏了会把tars2go重命名为binweb
TarsGo 的官方 Quick Start 文档 的第一个例子,就是使用 tars 协议进行 server-client 的通讯。不过我我的以为,要说后台服务程序的 hello world 的话,第一个应该是 http 服务嘛,毕竟程序一运行就能够看到效果,这才是 hello world 嘛。json
TARS 实例的名称,有三个层级,分别是 App(应用)、Server(服务)、Servant(服务者,有时也称 Object)三级。在接触TARS框架的过程当中咱们已经初步接触到了:好比 TARS 基础框架中的 tarsstat
,其服务的完整名称即为:tars.tarsstat.StatObj
。app
TARS 实例的名称其中一个很是重要的做用就是用于服务间名字服务寻址。而对于 HTTP 这样的直接对外提供服务的实例而言,其实这块相对不是很重要,咱们更多的是以描述服务功能的角度去命名。这里我把个人 HTTP 服务命名为 amc.GoWebServer.GoWebObj
框架
和TarsCpp同样,TarsGo也提供了一个 create_tars_server.sh
脚本用于生成 TARS 服务,但却没有提供 create_http_server.sh
生成 HTTP 服务。因此这里咱们就直接用它就好了:运维
cd $GOPATH/src/github.com/TarsCloud/TarsGo/tars/tools chmod +x create_tars_server.sh ./create_tars_server.sh amc GoWebServer GoWeb
执行后咱们能够查看生成的文件,清除不须要的:curl
cd $GOPATH/src/amc/GoWebServer rm -rf GoWeb.tars client debugtool chmod +x start.sh ls -l
文件以下
total 44 -rwxr-xr-x. 1 root root 955 7月 23 01:53 config.conf -rwxr-xr-x. 1 root root 604 7月 23 01:53 goweb_imp.go -rwxr-xr-x. 1 root root 365 7月 23 02:02 main.go -rw-r--r--. 1 root root 251 7月 23 01:53 makefile -rwxr-xr-x. 1 root root 52 7月 23 01:53 start.sh drwxr-xr-x. 3 root root 36 7月 23 02:02 vendor
其实留下的,各文件里的内容,实际上咱们都要彻底替换掉的……首先是修改makefile
,自动生成的makefile
内容是这样的:
APP := amc TARGET := GoWebServer MFLAGS := DFLAGS := CONFIG := client STRIP_FLAG:= N J2GO_FLAG := libpath=${subst :, ,$(GOPATH)} $(foreach path,$(libpath),$(eval -include $(path)/src/github.com/TarsCloud/TarsGo/tars/makefile.tars))
咱们把CONFIG := client
行去掉就好了。
接着是修改代码了。首先是 main.go
,这里参照官方 Guide 的写法就行了,TarsGo 的 HTTP 实现用的是 Go 原生的组件。我稍微调整了一下,把回调函数放在 goweb_imp.go
中(imp
是 implementation,我之前一直觉得是小恶魔的意思……),将 main.go
简化为:
package main import ( "github.com/TarsCloud/TarsGo/tars" ) func main() { mux := &tars.TarsHttpMux{} mux.HandleFunc("/", HttpRootHandler) cfg := tars.GetServerConfig() tars.AddHttpServant(mux, cfg.App+"."+cfg.Server+".GoWebObj") //Register http server tars.Run() }
代码仍是比较简单的,无需多言。
main.go
中的 HTTPRootHandler
回调函数定义在业务的主要实现逻辑 goweb_imp.go
文件中:
package main import ( "fmt" "time" "net/http" ) func HttpRootHandler(w http.ResponseWriter, r *http.Request) { time_fmt := "2006-01-02 15:04:05" local_time := time.Now().Local() time_str = local_time.Format(time_fmt) ret_str = fmt.Sprintf("{\"msg\":\"Hello, Tars-Go!\", \"time\":\"%s\"}", time_str) w.Header().Set("Content-Type", "application/json;charset=utf-8") w.Write([]byte(ret_str)) return }
编译打包上面的工程:
cd $GOPATH/src/amc/GoWebServer make && make tar
成功后,会在目录下生成目标文件 GoWebServer.tgz
,后文部署发布时须要上传这个包。
在 TARS 管理平台主页中,点击 “运维管理”,界面以下:
TARS 管理平台没有专门的 “新增应用” 功能,全部 app
、server
、object
的新增都在这个界面中配置。输入一个不存在的对象,就至关于新增操做。因此咱们新增 amc.GoWebServer.GoWebObj
,就是在各项中以下填写:
amc
GoWebServer
tars_go
tars.go.default
GoWebObj
TCP
非TARS
各项填写完毕后,点 肯定
,而后刷新界面,从新进入 TARS 管理平台主页,能够看到界面左边的列表就多了上面的配置:
点击 GoWebServer
,显示 发布管理
子标签。在 服务列表
中选中须要发布的节点,而后点击 发布选中节点
按钮:
再点击 “上传发布包”,进入以下界面:
点击 “发布包” 右边的 “肯定” 按钮,在弹出的对话框中选择前面提到的 GoWebServer.tgz 文件。给这个发布包写好描述以后,点击确认,开始上传发布包:
发布成功后,回到 “发布管理” 界面,在该界面中,选择刚才发布的包,而后点击发布,一切正常状况下,便可发布成功。
假设前面获取到的 servant 端口为 18869
,那么能够在机器上执行 curl 命令(好比个人机器 IP 是 192.168.211.128
):
curl 192.168.211.128:18869
返回结果
{"msg":"Hello, Tars-Go!","unix":1546747070,"time":"2019-01-06 11:57:50","client":":-1"}
这就验证 OK 啦,同时也说明了 TARS 管理平台的配置值配置正确了。
TARS能够在考虑到易用性和高性能的同时快速构建系统并自动生成代码,帮助开发人员和企业以微服务的方式快速构建本身稳定可靠的分布式应用,从而令开发人员只关注业务逻辑,提升运营效率。多语言、敏捷研发、高可用和高效运营的特性使 TARS 成为企业级产品。
TARS微服务助您数字化转型,欢迎访问:
TARS官网:https://TarsCloud.org
TARS源码:https://github.com/TarsCloud
获取《TARS官方培训电子书》:https://wj.qq.com/s2/6570357/...
或扫码获取: