TarsGo 服务 Hello World——从 HTTP 开始

Easter79
• 阅读 571

TarsGo 服务 Hello World——从 HTTP 开始

在进行本文实践之前,需要先完成TARS架的搭建,参考 TARS框架部署文档 (文末附链接) 。 在我们的实际应用中,目前基于 TARS,主要采用 Node.js 和 C++ 进行开发。对于 C++ 程序员来说,目前最热门的后台开发语言莫过于 Google 的 Go。TARS 框架最新的版本已经把内部的 TafGo 开源为 TarsGo。作为与时俱进的程序员,当然要尝鲜啦。

TarsGo 服务 Hello World——从 HTTP 开始

GO环境

开发环境显然要安装好 Go 了。请注意的是,TarsGo 要求 Go 版本 1.9 以上。最新稳定版已经是 1.14 了,安装最新版即可。Go 安装好之后,请注意配置好 $GOPATH 和 $GOROOT 环境变量,建议配置为 $HOME/go 目录。尽管在 Go 1.8 之后,go 命令的运行已经不再需要程序员配置上述变量(go 会自动配置,可执行 $ go env 查看),但是 TarsGo 的脚本在执行的时候还是需要依赖。

TarsGo包

执行go安装命令并编译:

TarsGo 服务 Hello World——从 HTTP 开始

上述命令会把 TarsGo 下载下来,并且将比较重要的一个命令 tars2go 安装好。同时需要注意cp命令目的路径参数最后的斜杆不要漏了,漏了会把tars2go重命名为bin

TarsGo 服务 Hello World——从 HTTP 开始

TarsGo 的官方 Quick Start 文档(文末附链接)的第一个例子,就是使用 tars 协议进行 server-client 的通信。不过我个人觉得,要说后台服务程序的 hello world 的话,第一个应该是 HTTP 服务嘛,毕竟程序一运行就可以看到效果,这才是 hello world 嘛。

给服务命名

TARS 实例的名称,有三个层级,分别是 App(应用)、Server(服务)、Servant(服务者,有时也称 Object)三级。在接触TARS框架的过程中我们已经初步接触到了:比如 TARS 基础框架中的 tarsstat,其服务的完整名称即为:tars.tarsstat.StatObj。

TARS 实例的名称其中一个非常重要的作用就是用于服务间名字服务寻址。而对于 HTTP 这样的直接对外提供服务的实例而言,其实这块相对不是很重要,我们更多的是以描述服务功能的角度去命名。这里我把我的 HTTP 服务命名为 amc.GoWebServer.GoWebObj

创建基础框架

和TarsCpp一样,TarsGo也提供了一个 create_tars_server.sh 脚本用于生成 TARS 服务,但却没有提供 create_http_server.sh 生成 HTTP 服务。所以这里我们就直接用它就行了:

TarsGo 服务 Hello World——从 HTTP 开始

执行后我们可以查看生成的文件,清除不需要的:

TarsGo 服务 Hello World——从 HTTP 开始

文件如下

TarsGo 服务 Hello World——从 HTTP 开始

其实留下的,各文件里的内容,实际上我们都要完全替换掉的……首先是修改makefile,自动生成的makefile内容是这样的:

TarsGo 服务 Hello World——从 HTTP 开始

我们把CONFIG := client行去掉就行了。

代码修改

main.go

接着是修改代码了。首先是 main.go,这里参照官方 Guide 的写法就好了,TarsGo 的 HTTP 实现用的是 Go 原生的组件。我稍微调整了一下,把回调函数放在 goweb_imp.go 中(imp 是 implementation,我以前一直以为是小恶魔的意思……),将 main.go 简化为:

TarsGo 服务 Hello World——从 HTTP 开始

代码还是比较简单的,无需多言。

goweb_imp.go

main.go 中的 HTTPRootHandler 回调函数定义在业务的主要实现逻辑 goweb_imp.go 文件中:

TarsGo 服务 Hello World——从 HTTP 开始

TarsGo 服务 Hello World——从 HTTP 开始

编译打包

编译打包上面的工程:

TarsGo 服务 Hello World——从 HTTP 开始

成功后,会在目录下生成目标文件 GoWebServer.tgz,后文部署发布时需要上传这个包。

部署发布

创建服务

在 TARS 管理平台主页中,点击 “运维管理”,界面如下:

TarsGo 服务 Hello World——从 HTTP 开始

TARS 管理平台没有专门的 “新增应用” 功能,所有 `app`、`server`、`object` 的新增都在这个界面中配置。输入一个不存在的对象,就相当于新增操作。所以我们新增 `amc.GoWebServer.GoWebObj`,就是在各项中如下填写:

• 应用:`amc`

• 服务名称:`GoWebServer`

• 服务类型:`tars_go`

• 模板:`tars.go.default`

• 节点:填写你打算部署的 IP 地址

• OBJ:`GoWebObj`

• 端口类型:`TCP`

• 协议:`非TARS`

• 端口可以自定义,也可以填好信息后点 “获取端口” 来生成。

TarsGo 服务 Hello World——从 HTTP 开始

各项填写完毕后,点 确定,然后刷新界面,重新进入 TARS 管理平台主页,可以看到界面左边的列表就多了上面的配置:

TarsGo 服务 Hello World——从 HTTP 开始

发布服务

点击 GoWebServer,显示 发布管理 子标签。在 服务列表 中选中需要发布的节点,然后点击 发布选中节点 按钮:

TarsGo 服务 Hello World——从 HTTP 开始

再点击 “上传发布包”,进入如下界面:

TarsGo 服务 Hello World——从 HTTP 开始

点击 “发布包” 右边的 “确定” 按钮,在弹出的对话框中选择前面提到的 GoWebServer.tgz 文件。给这个发布包写好描述之后,点击确认,开始上传发布包:

TarsGo 服务 Hello World——从 HTTP 开始

发布成功后,回到 “发布管理” 界面,在该界面中,选择刚才发布的包,然后点击发布,一切正常情况下,即可发布成功。

TarsGo 服务 Hello World——从 HTTP 开始

服务验证

假设前面获取到的 servant 端口为 18869,那么可以在机器上执行 curl 命令(比如我的机器 IP 是 192.168.211.128):

TarsGo 服务 Hello World——从 HTTP 开始

返回结果

TarsGo 服务 Hello World——从 HTTP 开始

这就验证 OK 啦,同时也说明了 TARS 管理平台的配置值配置正确了。

TarsGo 服务 Hello World——从 HTTP 开始

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

附文中所有链接:

TARS框架部署文档: https://tarscloud.github.io/TarsDocs/SUMMARY.html

Quick Start 文档: https://tarscloud.github.io/TarsDocs/hello-world/tarsgo.html


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

TarsGo 服务 Hello World——从 HTTP 开始

TarsGo 服务 Hello World——从 HTTP 开始


TarsGo 服务 Hello World——从 HTTP 开始

TarsGo 服务 Hello World——从 HTTP 开始

TarsGo 服务 Hello World——从 HTTP 开始

点“在看”让TARS小姐姐变好看TarsGo 服务 Hello World——从 HTTP 开始

TarsGo 服务 Hello World——从 HTTP 开始

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

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Souleigh ✨ Souleigh ✨
3年前
前端性能优化 - 雅虎军规
无论是在工作中,还是在面试中,web前端性能的优化都是很重要的,那么我们进行优化需要从哪些方面入手呢?可以遵循雅虎的前端优化35条军规,这样对于优化有一个比较清晰的方向.35条军规1.尽量减少HTTP请求个数——须权衡2.使用CDN(内容分发网络)3.为文件头指定Expires或CacheControl,使内容具有缓存性。4.避免空的
Stella981 Stella981
3年前
2021 最顶级 React 组件库推荐
点上方蓝字关注公众号「前端从进阶到入院」作者丨MaxRozen译者丨王强策划丨小智AntDesign!(https://oscimg.oschina.net/oscnet/a85c35f23bd04e5da6a1e5e68a24119b.png)项目链接:AntDesignh
Stella981 Stella981
3年前
Android So动态加载 优雅实现与原理分析
背景:漫品Android客户端集成适配转换功能(基于目标识别(So库35M)和人脸识别库(5M)),导致apk体积50M左右,为优化客户端体验,决定实现So文件动态加载.!(https://oscimg.oschina.net/oscnet/00d1ff90e4b34869664fef59e3ec3fdd20b.png)点击上方“蓝字”关注我
可莉 可莉
3年前
2021 最顶级 React 组件库推荐
点上方蓝字关注公众号「前端从进阶到入院」作者丨MaxRozen译者丨王强策划丨小智AntDesign!(https://oscimg.oschina.net/oscnet/a85c35f23bd04e5da6a1e5e68a24119b.png)项目链接:AntDesignh
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k