go-micro講解--Go Micro編寫微服務
一、什麼是go-micro
- Go Micro是一個外掛化的基礎框架,基於此可以構建微服務。Micro的設計哲學是『可插拔』的外掛化架構。在架構之外,它預設實現了consul作為服務發現,通過http進行通訊,通過protobuf和json進行編解碼。我們一步步深入下去。
Go Micro是:
- 一個用Golang編寫的包
- 一系列外掛化的介面定義
- 基於RPc
- Go Micro為下面的模組定義了介面:
- 服務發現
- 編解碼
- 服務端、客戶端
- 訂閱、釋出訊息
二、使用go-micro編寫微服務
安裝protoc
1.github上下載一個cpp包:https://github.com/google/protobuf/releases make make install安裝即可
2.protoc-gen-go
go get -u github.com/golang/protobuf/protoc-gen-go
3.安裝protoc-gen-micro
go get github.com/micro/protoc-gen-micro
安裝Consul
micro預設使用consul作為微服務發現
Consul is used as the default service discovery system.
Discovery is pluggable. Find plugins for etcd, kubernetes, zookeeper and more in the micro/go-plugins repo.
https://www.consul.io/intro/getting-started/install.html
啟動cansul方式參考如下:注意修改自己-data-dir目錄路勁
consul agent -server -node chenxun-server -bind=192.168.199.62 -data-dir D:\工作檔案備份\consul_1.0.0_windows_amd64\tmp1 -ui
# consul agent -server -bootstrap-expect 1 -node chenxun-server -bind=192.168.199.62 -data-dir c:/tmp
# ./consul agent -server -bootstrap-expect 1 -data-dir /tmp/consul -node=chenxun-server -bind=192.168.145.130 -ui
準備proto檔案: 檔案儲存為chenxun.proto,名稱隨便寫,在實際專案中根據專案寫就好了
chenxun.proto
syntax = "proto3";
service Greeter {
rpc Hello(HelloRequest) returns (HelloResponse) {}
}
message HelloRequest {
string name = 1;
}
message HelloResponse {
string greeting = 2;
}
Generate the proto:
protoc --proto_path=$GOPATH/src:. --micro_out=. --go_out=. chenxun.proto
執行命令後能看到下面檔案:
-rw-r--r--. 1 root root 2441 Jul 7 10:38 chenxun.micro.go
-rw-r--r--. 1 root root 2914 Jul 7 10:38 chenxun.pb.go
-rw-r--r--. 1 root root 185 Jul 6 11:36 chenxun.proto
比如我把這三個檔案放在gopath路勁下面的src目錄下面的mygoproject/gomirco
那麼在import的時候寫: import "mygoproject/gomirco"
Service端程式碼:
package main
import (
"context"
"fmt"
micro "github.com/micro/go-micro"
proto "mygoproject/gomirco" //這裡寫你的proto檔案放置路勁
)
type Greeter struct{}
func (g *Greeter) Hello(ctx context.Context, req *proto.HelloRequest, rsp *proto.HelloResponse) error {
rsp.Greeting = "Hello " + req.Name
return nil
}
func main() {
// Create a new service. Optionally include some options here.
service := micro.NewService(
micro.Name("greeter"),
)
// Init will parse the command line flags.
service.Init()
// Register handler
proto.RegisterGreeterHandler(service.Server(), new(Greeter))
// Run the server
if err := service.Run(); err != nil {
fmt.Println(err)
}
}
Client端程式碼:
package main
import (
"context"
"fmt"
micro "github.com/micro/go-micro"
proto "mygoproject/gomirco" //這裡寫你的proto檔案放置路勁
)
func main() {
// Create a new service. Optionally include some options here.
service := micro.NewService(micro.Name("greeter.client"))
service.Init()
// Create new greeter client
greeter := proto.NewGreeterService("greeter", service.Client())
// Call the greeter
rsp, err := greeter.Hello(context.TODO(), &proto.HelloRequest{Name: "John"})
if err != nil {
fmt.Println(err)
}
// Print response
fmt.Println(rsp.Greeting)
}
執行service:
go run examples/service/main.go
執行client:
go run examples/client/main.go
相關文章
- (18)go-micro微服務ELK介紹Go微服務
- (7)go-micro微服務zap日誌配置Go微服務
- (6)go-micro微服務consul配置、註冊中心Go微服務
- (16)go-micro微服務jaeger鏈路追蹤Go微服務
- go微服務框架go-micro深度學習(五) stream 呼叫過程詳解Go微服務框架深度學習
- go微服務框架go-micro深度學習(二) 入門例子Go微服務框架深度學習
- go微服務框架go-micro深度學習(四) rpc方法呼叫過程詳解Go微服務框架深度學習RPC
- go微服務框架go-micro深度學習(一) 整體架構介紹Go微服務框架深度學習架構
- 牌類遊戲使用微服務重構筆記(三): micro框架簡介 go-micro遊戲微服務筆記框架Go
- (23)go-micro微服務客戶端開發(使用負載均衡)Go微服務客戶端負載
- 基於知名微服務框架go-micro開發gRPC應用程式微服務框架GoRPC
- go微服務框架go-micro深度學習(三) Registry服務的註冊和發現Go微服務框架深度學習
- 微服務框架 Go-Micro 整合 Nacos 實戰之服務註冊與發現微服務框架Go
- Micro原始碼系列 - Go-Micro服務是如何註冊的原始碼Go
- 搭建 go-micro 開發環境Go開發環境
- go-micro之原始碼剖析: RegistryGo原始碼
- go微服務系列(一) go micro入門Go微服務
- go-micro v2運開實踐-框架篇(3)註冊第一個微服務Go框架微服務
- go-micro整合RabbitMQ實戰和原理GoMQ
- go-micro微信群,方便大家交流Go
- 關於 go-micro 相關問題Go
- go-micro v2運開實踐-業務架構Go架構
- go-micro開發RPC服務的方法及其執行原理GoRPC
- go-micro使用Consul做服務發現的方法和原理Go
- go-micro v2運開實踐-行文初衷Go
- Go-Micro客戶端請求報500錯誤的解決方法Go客戶端
- 解決go-micro與其它gRPC框架之間的通訊問題GoRPC框架
- 使用 go micro 搭建微服務介面的經驗教訓Go微服務
- [譯] 使用 Go 編寫微服務及其 GraphQL 閘道器Go微服務
- [從RPC到Go-Micro 壹]Go語言實現RPC程式設計RPCGoC程式程式設計
- micro/micro:分散式微服務雲作業系統分散式微服務作業系統
- go-micro v2運開實踐-框架篇(1)初始化專案安裝microGo框架
- go-micro整合鏈路跟蹤的方法和中介軟體原理Go
- SpringCloudAlibaba 微服務講解(二)微服務環境搭建SpringGCCloud微服務
- (開源) 基於go-micro微服務實戰, 包含React native開發的iOS Android端和基於vue的後臺管理系統Go微服務React NativeiOSAndroidVue
- 編寫第一個 .NET 微服務微服務
- go 微服務Go微服務
- 基於Golang的微服務——Micro實踐(一)Golang微服務