go-micro 微服務實戰(二)

我們來實現api網關代理後端的rpc服務。

首先,編寫一個proto文件,定義接口:

創建目錄proto/user,編寫user.proto內容如下:

syntax="proto3"; package user; service User{ rpc Get(Request) returns (Reponse){} } message Request{ } message Reponse{ Uinfo user=1; } message Uinfo{ string id =1; string name =2; }

然後生成對應的golang文件:

protoc --micro_out=. --go_out=. proto/user/user.proto

接下來,編寫main.go,內容如下:

package main import ( "context" "fmt" pb "demo2/proto/user" "github.com/micro/go-micro" "github.com/micro/go-micro/registry/consul" ) type User struct { } func (u *User) Get(ctx context.Context, req *pb.Request, res *pb.Reponse) error { fmt.Println("received user/get request") user := &pb.Uinfo{ Id: "1", Name: "test", } res.User = user return nil } func main() { reg := consul.NewRegistry() srv := micro.NewService( micro.Name("anakin.sun.api.user"), micro.Registry(reg), ) srv.Init() pb.RegisterUserHandler(srv.Server(), new(User)) err := srv.Run() if err != nil { fmt.Println(err) } }

注意,這裡採用的是go mod的包管理方式組織的文件

好的,準備好了,運行這個文件:

go run main.go

啟動api gateway:

micro --registry=consul api --handler=api --namespace=anakin.sun.api

現在可以訪問了,用postman訪問試試看:

GET localhost:8080/user/get