我们来实现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
關鍵字: 编写 User fmt.Println