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

這篇文章主要是微服務客戶端,函數,發佈訂閱...的實踐。git

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

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

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

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

在 micro 中, 服務分爲三種類型:bash

  • srv:srv 是標準的 RPC 服務, 也能夠叫作後端服務, 開發人員一般寫的就是這種類型. 在 Micro 的設想中, 這一服務永遠不會面向用戶,屬於內部服務.
  • api:提供 HTTP 到 RPC 的轉換服務, API 網關默認狀況下會將請求轉發給它來處理.
  • web:Micro 認爲 web 也能夠當作微服務來建立.

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

定義客戶端

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實戰

相關文章
相關標籤/搜索