乐趣区

关于golang:TarsGo-服务-Hello-World从-HTTP-开始

作者:amc

导语:在进行本文实际之前,须要先实现 TARS 架的搭建,参考 TARS 框架部署文档。在咱们的理论利用中,目前基于 TARS,次要采纳 Node.js 和 C++ 进行开发。对于 C++ 程序员来说,目前最热门的后盾开发语言莫过于 Google 的 Go。TARS 框架最新的版本曾经把外部的 TafGo 开源为 TarsGo。作为与时俱进的程序员,当然要尝鲜啦。

环境筹备

GO 环境

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

TarsGo 包

执行 go 装置命令并编译:

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 重命名为 bin

代码设计

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 服务。所以这里咱们就间接用它就行了:

cd $GOPATH/src/github.com/TarsCloud/TarsGo/tars/tools
chmod +x create_tars_server.sh
./create_tars_server.sh amc GoWebServer GoWeb

执行后咱们能够查看生成的文件,革除不须要的:

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

接着是批改代码了。首先是 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()}

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

goweb_imp.go

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 治理平台没有专门的“新增利用”性能,所有 appserverobject 的新增都在这个界面中配置。输出一个不存在的对象,就相当于新增操作。所以咱们新增 amc.GoWebServer.GoWebObj,就是在各项中如下填写:

  • 利用:amc
  • 服务名称:GoWebServer
  • 服务类型:tars_go
  • 模板:tars.go.default
  • 节点:填写你打算部署的 IP 地址
  • OBJ: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/…
或扫码获取:

原文公布于:https://cloud.tencent.com/developer/article/1381300

退出移动版