基於Golang的微服務——Micro實踐(二)

winyh發表於2019-07-14

這篇文章主要是微服務客戶端,函式,釋出訂閱...的實踐。

想了解微服務服務端定義的請看我上一篇文章基於Golang的微服務——Micro實踐(一)

在 Micro 架構中, 一個完整的請求流程是:

api-gateway => [customer-api | customer-web ] => customer-srv

其中 api-gateway 是 有 micro 工具直接提供的, customer-(api | web | srv) 則是 micro中的開發概念.

在 micro 中, 服務分為三種型別:

  • srv:srv 是標準的 RPC 服務, 也可以叫做後端服務, 開發人員通常寫的就是這種型別. 在 Micro 的設想中, 這一服務永遠不會面向使用者,屬於內部服務.
  • api:提供 HTTP 到 RPC 的轉換服務, API 閘道器預設情況下會將請求轉發給它來處理.
  • web:Micro 認為 web 也可以當做微服務來建立.

附一張圖演示這SRV, API, WEB三者之間的關係:

基於Golang的微服務——Micro實踐(二)

定義客戶端

popular專案目錄下新建檔案 client.go,編輯檔案內容

package main

import (
	"context"
	"fmt"
	micro "github.com/micro/go-micro"
	proto "popular/proto"
)


func main() {
	// 定義服務,可以傳入其它可選引數
	service := micro.NewService(micro.Name("popular.client"))
	service.Init()

	// 建立新的客戶端
	popular := proto.NewGreeterService("popular", service.Client())

	// popular
	rsp, err := popular.Ping(context.TODO(), &proto.PingRequest{Name: "winyh"})
	if err != nil {
		fmt.Println(err)
	}

	// 列印響應請求
	fmt.Println(rsp.Popularing)
}
複製程式碼

執行客戶端

go run client.go
複製程式碼

輸出內容為:

Ping winyh
複製程式碼

定義Function

Function是指接收一次請求,執行後便退出的服務

只需要稍微改造下main.go 檔案即可

package main

import (
	"context"
	"fmt"
	micro "github.com/micro/go-micro"
	proto "popular/proto"
)

type Popular struct{}

func (g *Popular) Ping(ctx context.Context, req *proto.PingRequest, rsp *proto.PingResponse) error {
	rsp.Popularing = "Ping " + req.Name
	return nil
}

func main() {

	// 建立新的服務,這裡可以傳入其它選項。
	service := micro.NewService(
		micro.Name("popular"),
	)

	// 初始化方法會解析命令列標識
	service.Init()

	// 註冊處理器
	proto.RegisterPopularHandler(service.Server(), new(Popular))

	// 執行服務
	if err := service.Run(); err != nil {
		fmt.Println(err)
	}

	/********* == 函式定義 == *********/
	// 建立新函式
	fnc := micro.NewFunction(
		micro.Name("popular"),
	)

	// 初始化命令列
	fnc.Init()

	// 註冊handler
	fnc.Handle(new(Popular))

	// 執行服務
	fnc.Run()
}
複製程式碼

釋出與訂閱

Go-micro 給事件驅動架構內建了訊息代理(broker)介面。釋出與訂閱像RPC一樣操控生成的protobuf訊息。這些訊息會自動編/解碼並通過代理髮送.

[這部分我得理解下...],先寫我之前練手的一個小專案 基於Golang的開發框架Gin實戰

相關文章