golang微服務框架go-micro 入門筆記2.2 micro工具之微應用利器micro web
micro web
micro 功能非常強大,本文將詳細闡述micro web 命令列的功能
閱讀本文前你可能需要進行如下知識儲備
本文應用環境
|名稱|描述| |--|--| |作業系統|win10| |go version|go version go1.12.7 windows/amd64| |GOPATH|E:\winlion\gopath| |GOPROXY|https://goproxy.io| |G111MODULE|on| |命令列工具|cmder工具,可自行百度安裝|
命令列說明
micro web指令全部引數如下
NAME: micro web - Run the web dashboard USAGE: micro web [command options] [arguments...] OPTIONS: --address value Set the web UI address e.g 0.0.0.0:8082 [%MICRO_WEB_ADDRESS%] --namespace value Set the namespace used by the Web proxy e.g. com.example.web [%MICRO_WEB_NAMESPACE%]
- address 用來指定web訪問地址,預設是8082埠,
- namespace 用來指定開啟web支援的服務空間,com.axample.web表示所有滿足com.axample.web.*的應用都支援
典型應用場景
微信應用開發平臺
A公司是一家小創業公司,a公司的主要業務是做微信小應用,目前他們公司只有一個域名www.xxx.com
,A公司採用micro web 工具,可以不斷迭代新應用到www.xxx.com
域名下,比如昨天他們開發了一個應用demo1,外網使用者訪問地址https://www.xxx.com/demo1/
,明天天他們開發了一個應用demo2,外網使用者訪問地址https://www.xxx.com/demo2/
|服務名稱|說明|訪問地址| |--|--|--| |com.techidea8.web.www|A公司的主域名|http://www.xxx.com/www/| |com.techidea8.srv.wxmp|A公司的微信服務,如簽名、分享、選單管理等|http://www.xxx.com/wxmp/| |com.techidea8.web.attach|A公司的資源上傳服務|http://www.xxx.com/attach/| |com.techidea8.web.pay|A公司的支付服務|http://www.xxx.com/pay/| |com.techidea8.web.account|A公司的使用者中心|http://www.xxx.com/account/| |com.techidea8.web.article|A公司的寫作類平臺|http://www.xxx.com/article/| |com.techidea8.web.demo1|A公司的demo1應用|http://www.xxx.com/demo1/| |com.techidea8.web.demox|A公司的demox應用|http://www.xxx.com/demox/|
a公司可以不斷迭代業務,這個平臺具備良好的擴張性。
分散式任務分發平臺
Openwrite是一個面向技術人員的寫作分發平臺,使用者在該平臺一次寫作,可以分發到·csdn/oschina/jianshu/juejin·等各個渠道,我們採用micro web開發如下微應用產品,後續可以不斷迭代開發新渠道服務com.techidea8.channel*
,不會影響現有業務。
|服務名稱|說明|訪問地址| |--|--|--| |com.techidea8.web.www|網站首頁|http://www.xxx.com/www/| |com.techidea8.web.attach|圖片、資源等上傳服務|http://www.xxx.com/attach/| |com.techidea8.web.account|使用者中心|http://www.xxx.com/account/| |com.techidea8.web.article|文件中心|http://www.xxx.com/article/| |com.techidea8.web.channelcsdn|csdn渠道應用|http://www.xxx.com/channelcsdn/| |com.techidea8.web.channeljuejin|掘金渠道應用|http://www.xxx.com/channeljuejin/|
實戰hello,world!
業務梳理
假設我們需要實現類似於如下千人千面功能,具體應用場景如下
- 首頁應用www,展示常用基本資訊
- 推薦支援,不同的使用者(uuid標識),顯示不同的內容
服務設計如下
|服務名稱|說明|訪問地址| |--|--|--| |go.micro.web.www|系統首頁|http://127.0.0.1:8082/www/| |go.micro.srv.recommend|推薦服務|http://127.0.0.1:8082/www/guess|
獲得原始碼並執行
重要的事情說3次 micro web 原始碼https://idea.techidea8.com/open/idea.shtml?id=7 micro web 原始碼https://idea.techidea8.com/open/idea.shtml?id=7 micro web 原始碼 https://idea.techidea8.com/open/idea.shtml?id=7
下載解壓後位置為%GOPATH%\src\techidea8.com\microapp\doc\web
$pwd
E:\winlion\gopath\src\techidea8.com\microapp\doc\web
$ls
recommend/ www/
依次執行如下指令即可
#切換到wwww目錄下
src\techidea8.com\microapp\doc\web\www>go run main.go
#切換到recommend服務目錄下
src\techidea8.com\microapp\doc\web\recommend>go run main.go
#啟動web支援
src\techidea8.com\microapp\doc\web\recommend>micro web --namespace=go.micro.web
介面如下
關於www應用細節
- 建立應用框架
>micro new --type=web techidea8.com/microapp/doc/web/www
- 設計proto檔案,這裡需要請求一個Guess介面
#E:\winlion\gopath\src\techidea8.com\microapp\doc\web\www\proto\recommend\recommend.proto
service Recommend{
rpc Guess(Request)returns(Response){};
}
- 通過proto生成go檔案
#E:\winlion\gopath\src\techidea8.com\microapp\doc\web\www\ 目錄下
>protoc --proto_path=. --proto_path=E:/winlion/gopath/src --go_out=. --micro_out=. proto/recommend/recommend.proto
#
- 呼叫猜你喜歡服務,核心程式碼如下
//handler/handler.go
//go.micro.srv.recommend 是後端猜你喜歡服務名稱
guessClient := recommend.NewRecommendService("go.micro.srv.recommend", client.DefaultClient)
rsp, err := guessClient.Guess(context.TODO(), &recommend.Request{
Uuid: request["uuid"].(string),//uuid是前端使用者ID
})
- 猜你喜歡restful介面支援/www/guess
//預設需要加上服務名前奏
// register html handler
service.Handle("/", http.FileServer(http.Dir("html")))
// register call handler/www/guess
service.HandleFunc("/guess", handler.Guess)
- 啟動web服務
$micro web --namespace=go.micro.web
#結果如下
2019/08/25 15:32:08 HTTP API Listening on [::]:8082
2019/08/25 15:32:08 Transport [http] Listening on [::]:57563
2019/08/25 15:32:08 Broker [http] Connected to [::]:57564
2019/08/25 15:32:08 Registry [mdns] Registering node: go.micro.web-32fafadb-a795-46bc-b4d8-ad9a30607a7e
關於推薦服務recommend細節
- 建立應用框架
>micro new --type=srv techidea8.com/microapp/doc/web/recommend
- 設計proto檔案,這裡需要請求一個Guess介面
#E:\winlion\gopath\src\techidea8.com\microapp\doc\web\recommend\proto\recommend\recommend.proto
service Recommend{
rpc Guess(Request)returns(Response){};
}
- 通過proto生成go檔案
#E:\winlion\gopath\src\techidea8.com\microapp\doc\web\recommend\ 目錄下
>protoc --proto_path=. --proto_path=E:/winlion/gopath/src --go_out=. --micro_out=. proto/recommend/recommend.proto
#
- 實現推薦服務,核心程式碼如下
//handler\recommend.go
//go.micro.srv.recommend 是後端猜你喜歡服務名稱
func (e *Recommend) Guess(ctx context.Context, req *recommend.Request, rsp *recommend.Response) error {
log.Log("Received Recommend.Call request")
//具體推薦演算法實在這裡實現的,
//推薦演算法得到結果後賦值給resp.Results
rsp.Results = "這是使用者[" + req.Uuid + "]的推薦內容"
return nil
}
- 取消事件相關特性
我們這裡不考慮事件,所以將事件相關特性取消,先一出subscriber目錄,然後修改main.go
main.go
// 取消事件訂閱支援
//micro.RegisterSubscriber("go.micro.srv.recommend", service.Server(), new(subscriber.Hello))
//取消事件釋出支援
//micro.RegisterSubscriber("go.micro.srv.recommend", service.Server(), subscriber.Handler)
- 啟動推薦服務
$go run main.go