Tars-Go 服務 Hello World——從 HTTP 開始

banner

做者:amchtml

導語:在進行本文實踐以前,須要先完成TARS架的搭建,參考TARS框架部署文檔。在咱們的實際應用中,目前基於 TARS,主要採用 Node.js 和 C++ 進行開發。對於 C++ 程序員來講,目前最熱門的後臺開發語言莫過於 Google 的 Go。TARS 框架最新的版本已經把內部的 Taf-Go 開源爲 Tars-Go。做爲與時俱進的程序員,固然要嚐鮮啦。git

環境準備

GO環境

開發環境顯然要安裝好 Go 了。請注意的是,TarsGo 要求 Go 版本 1.9 以上。最新穩定版已是 1.14 了,安裝最新版便可。 Go 安裝好以後,請注意配置好 $GOPATH$GOROOT 環境變量,建議配置爲 $HOME/go 目錄。儘管在 Go 1.8 以後,go 命令的運行已經再也不須要程序員配置上述變量(go 會自動配置,可執行 $ go env 查看),可是 TarsGo 的腳本在執行的時候仍是須要依賴。程序員

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.StatObjapp

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

接着是修改代碼了。首先是 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 管理平臺主頁,能夠看到界面左邊的列表就多了上面的配置:

amc.GoWebServer

發佈服務

點擊 GoWebServer,顯示 發佈管理 子標籤。在 服務列表 中選中須要發佈的節點,而後點擊 發佈選中節點 按鈕:

patch_manage

再點擊 「上傳發布包」,進入以下界面:

upload_tar

點擊 「發佈包」 右邊的 「肯定」 按鈕,在彈出的對話框中選擇前面提到的 GoWebServer.tgz 文件。給這個發佈包寫好描述以後,點擊確認,開始上傳發布包:

服務部署

發佈成功後,回到 「發佈管理」 界面,在該界面中,選擇剛纔發佈的包,而後點擊發布,一切正常狀況下,便可發佈成功。

result

服務驗證

假設前面獲取到的 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/3adb/

或掃碼獲取:

QR

原文發佈於:https://cloud.tencent.com/developer/article/1381300

相關文章
相關標籤/搜索