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 管理平臺沒有專門的 “新增應用” 功能,所有 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/...
或掃碼獲取: