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