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


分享到:


相關文章: