目錄
01 03-go-micro簡介
02 04-服務發現的簡單認識
03 05-consul的安裝
04 06-consul常用的命令
05 07-注冊服務到consul并驗證
06 08-consul健康檢查
07 09-consul結合grpc使用-上(只實現grpc遠程調用)
08 10-consul結合grpc使用-中(注冊服務到consul)
09 11-consul結合grpc使用-下(client從consul獲取服務
10 12-consul結合grpc使用-小結
11 13-服務注銷
01go-micro簡介
# go-Micro 框架## 創建 micro 服務命令:micro new --type srv test66框架默認自帶服務發現:mdns。使用consul服務發現:1. 初始consul服務發現: consulReg := consul.NewRegistry()2. 在 NewService 中 添加 服務。 micro.Registry(consulReg ),## 使用 go-micro框架 創建 客戶端命令:micro new --type web test77### 補充 http 相關知識:- 路由器:資源分發 - 路由:請求分發。- service.HandleFunc("/test77/call", handler.Test77Call)- 將 /test77/call 這個請求,通過 回到函數 Test77Call() 處理。 - URL:- 組成:https://ip+port/資源路徑- https://ip+port/ 找到 pc機,找到 對應進程- 資源路徑:在代碼中,稱之為路由。- “/ ” : 代表 主機上進程 對應的默認資源。- http協議,自動找當前目錄下的 index.html 文件,做默認頁面。
02 服務發現的簡單認識
### go-micro 框架 測試使用 分析圖# gin 框架go常見的web框架:gin、beego、echo、Iris 。。。### 實現簡單的 web http 常用方法與 數據庫訪問 一一對應。- GET —— 查 —— 獲取數據 - Post —— 增 —— 增加數據 - Put —— 改 —— 更新數據 - Delete —— 刪 —— 刪除數據?
03 consul的安裝
### 使用 gin 框架創建最簡單的web ```gofunc main() {// 1. 初始化路由 -- 官網:初始化 web 引擎router := gin.Default()// 2. 做路由匹配router.GET("/", func(context *gin.Context) {context.Writer.WriteString("hello world!")})// 3. 啟動運行router.Run(":8080") } ```### gin 框架的客戶端 與 微服務 對接1. 封裝回調函數, 給 router.Get() 設置2. 拷貝 微服務的 “ 密碼本” protobuf 到 web 中3. 修改 protobuf文件的 包名。 test66別名 “test66web/proto/test66”4. 實現 回調函數:1. 初始化客戶端。 microClient := NewTeset66Sevice(服務名,client.DefaultClient)2. 調用遠程服務。 resp, err := microClient.Call(context.TODO, &test66.Request{? })3. 將 返回的 數據, 顯示到 瀏覽器。 context.Writer.WriteString(resp.Msg);```go package mainimport ("github.com/gin-gonic/gin""fmt"test66 "test66web/proto/test66" // test66 為包的別名."github.com/micro/go-micro/client""context" )func CallRemote(ctx *gin.Context) {// 1. 初始化客戶端microClient := test66.NewTest66Service("go.micro.srv.test66", client.DefaultClient)fmt.Println()// 2. 調用遠程服務resp, err := microClient.Call(context.TODO(), &test66.Request{Name:"xiaowang",})if err != nil {fmt.Println("call err:", err)return}// 為了方便查看, 在打印之前將結果返回給瀏覽器ctx.Writer.WriteString(resp.Msg)fmt.Println(resp, err) }
04 consul常用的命令
func main() {// 1. 初始化路由 -- 官網:初始化 web 引擎router := gin.Default()// 2. 做路由匹配router.GET("/", CallRemote)// 3. 啟動運行router.Run(":8080") }```### 指定 consul 服務發現到 go-micro 服務和 gin 框架客戶端中- mdns服務發現: (組播)支持的服務,必須是本地服務, 局域網內的服務。#### 修改 go-micro 微服務1. consulReg := consul.NewRegistry() 初始化 consul服務發現 2. 添加 服務 service := micro.NewService(micro.Name("go.micro.srv.test66"),micro.Registry(consulReg),micro.Version("latest"),)3. 在命令行,執行 consul agent -dev
05 注冊服務到consul并驗證
#### 修改 gin 框架 web服務 (客戶端)1. consulReg := consul.NewRegistry() 初始化 consul服務發現 2. microClinet := micro.NewService( micro.Registry(consulReg ) ) 3. test66.NewTest66Service(“服務名”,microClinet.Client() )測試:瀏覽器鍵入: 192.168.6.108:8080 ——> hello xiaowang # REST REST全稱是Representational State Transfer: 表述性 狀態 轉義本質:一種代碼設計風格。 web開發中常用。——遵循風格!使用:一般以 http 4 種請求方法, 來確定對某一資源(URI:標識符。名詞)的 固定操作。- 獲取數據:GET - 添加數據:POST - 修改數據:PUT - 刪除數據:Delete? 滿足 REST 設計風格的, 稱之為 “RESTful”
06 consul健康檢查
# MVC- 是一種常見的 “代碼組織架構”, 可以在開發中,對數據進行處理并解耦。- model:模型。 處理數據庫相關的文件。- veiw:視圖。處理顯示相關的文件。 網站:html- controller:控制器。處理具體業務! 聯動 m 和 v - MVC 與語言無關!是常見的 代碼組織架構。# 項目準備1. 準備項目環境。1. 創建項目目錄 web、service2. 在 web 端 使用 MVC3. 創建項目常用目錄: conf 配置文件、utils 工具類、bin可執行文件、test測試目錄4. 導入 異常處理error.go5. 導入前端資源 html/ 到 view/ 中2. 開發項目1. 開發 微服務端2. 開發 web 服務(客戶端)### http協議錯誤5 類:1. 1xx 100 請求成功,需要繼續發送請求 2. 2xx 200 201 202 請求被成功接收。 3. 3xx 300 301 請求的資源,指定到對應的 URI上 4. 4xx 404 403 請求端錯誤 5. 5xx 500 501 502 服務端錯誤### 網站開發形式:1. 前后端不分離- 前端只負責頁面創建,不負責加載數據。- 后臺負責主要業務書寫,數據操作、加載。—— 需要后端會 web。 css 、js、h5 2. 前后端分離- 前端負責頁面創建 和 數據的加載。- 后端只負責數據處理。 —— 節省時間:服務器優化 1)健壯性 2)并發性。
07 consul結合grpc使用-上(只實現grpc遠程調用)
# 獲取 session 1. 在 web/main.go 中 , 跟據 gin 框架 使用static() , 設置訪問路徑 2. F12 瀏覽器中,查看 NetWork 中 Headers 和 Respose。 得到 url 3. 查看 《接口文檔.doc》, 獲取 url 、錯誤碼、錯誤處理函數。 4. 在 web/ 下 遵循 MVC 設計模式創建 controller 目錄。添加 user.go 5. 根據 《接口文檔.doc》實現錯誤函數。1. resp[“errno”]2. resp[“errmsg”]3. ctx.Json(200, resp) // 將 錯誤消息,進行序列化。返回給瀏覽器。 6. url尋址時,都是從 “/‘’ 開始, 產生歧義- router.Static(“/”) --- 修改為: router.Static(“/home”)7. 瀏覽器測試: IP:8080/home