Go|青训营笔记

86 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天

开发步骤

这里详细的记录了开发的步骤,方便参看本项目的同学知道其实现过程。

1、生成proto模板文件

eagle proto add api/relation/v1/relation.proto
复制代码

内容如下

syntax = "proto3";

package relation.v1;

option go_package = "github.com/go-microservice/relation-service/api/relation/v1;v1";
option java_multiple_files = true;
option java_package = "api.relation.v1";

service RelationService {
	rpc CreateRelation (CreateRelationRequest) returns (CreateRelationReply);
	rpc UpdateRelation (UpdateRelationRequest) returns (UpdateRelationReply);
	rpc DeleteRelation (DeleteRelationRequest) returns (DeleteRelationReply);
	rpc GetRelation (GetRelationRequest) returns (GetRelationReply);
	rpc ListRelation (ListRelation1Request) returns (ListRelationReply);
}

message CreateRelation1Request {}
message CreateRelation1Reply {}

message UpdateRelationRequest {}
message UpdateRelationReply {}

message DeleteRelationRequest {}
message DeleteRelationReply {}

message GetRelationRequest {}
message GetRelationReply {}

message ListRelationRequest {}
message ListRelationReply {}
复制代码

然后将方法及request改为自己要定义的名称

2、为proto填充业务方法及字段定义

vim api/relation/v1/relation.proto
复制代码

3、生成pb文件

会生成两个文件 api/relation/v1/relation.pb.goapi/relation/v1/relation_grpc.pb.go

# 生成所有proto
make grpc

# 或者
# 生成指定proto的pb文件
eagle proto client api/relation/v1/relation.proto

# Output
ll api/relation/v1/
relation.proto
relation.pb.go # 新增
relation_grpc.pb.go # 新增
复制代码

4、生成server骨架代码

# 生成骨架代码
eagle proto server api/relation/v1/relation.proto

# 默认会输出到 internal/service
# 如果需要指定到对应的目录,可以使用 -t 参数, eg: 
# eagle proto server -t internal/logic

# 查看
internal/service/relation_svc.go
复制代码

5、注册服务到gRPC Server

// internal/server/grpc.go 

import (
		...
		v1 "github.com/go-microservice/relation-service/api/relation/v1"
		...
)

...

// NewGRPCServer creates a gRPC server
func NewGRPCServer(
	cfg *app.ServerConfig,
	// 新增
	svc *service.RelationServiceServer, 
) *grpc.Server {

	grpcServer := grpc.NewServer(
		grpc.Network("tcp"),
		grpc.Address(cfg.Addr),
		grpc.Timeout(cfg.WriteTimeout),
	)

	// register biz service
	// 新增
	v1.RegisterRelationServiceServer(grpcServer, svc)

	return grpcServer
}
复制代码

6、在生成的service中编写业务逻辑

在下面生成的service里补充自己的业务逻辑

// vim internal/service/relationservice_grpc.go

package service

import (
	"context"

	pb "github.com/go-microservice/relation-service/api/relation/v1"
)

var (
	_ pb.RelationServiceServer = (*RelationServiceServer)(nil)
)

type RelationServiceServer struct {
	pb.UnimplementedRelationServiceServer
}

func NewRelationServiceServer() *RelationServiceServer {
	return &RelationServiceServer{}
}

func (s *RelationServiceServer) CreateRelation(ctx context.Context, req *pb.CreateRelationRequest) (*pb.CreateRelationReply, error) {
	return &pb.CreateRelationReply{}, nil
}
func (s *RelationServiceServer) UpdateRelation(ctx context.Context, req *pb.UpdateRelationRequest) (*pb.UpdateRelationReply, error) {
	return &pb.UpdateRelationReply{}, nil
}
func (s *RelationServiceServer) DeleteRelation(ctx context.Context, req *pb.DeleteRelationRequest) (*pb.DeleteRelationReply, error) {
	return &pb.DeleteRelationReply{}, nil
}
func (s *RelationServiceServer) GetRelation(ctx context.Context, req *pb.GetRelationRequest) (*pb.GetRelationReply, error) {
	return &pb.GetRelationReply{}, nil
}
func (s *RelationServiceServer) ListRelation(ctx context.Context, req *pb.ListRelationRequest) (*pb.ListRelationReply, error) {
	return &pb.ListRelationReply{}, nil
}
复制代码

7、启动服务

# 在根目录下运行
go run main.go

# 或者
go build
./relation -c=config -e=dev
复制代码

确保运行gRPC server

// main.go

...
eagle.WithServer(
	// init gRPC server
	gs,
),
...
复制代码

8、接口调试

调试工具,这里使用 [grpcurl](<https://github.com/fullstorydev/grpcurl>)

# 查看服务列表
grpcurl -plaintext localhost:9099 list

# Output
grpc.health.v1.Health
grpc.reflection.v1alpha.ServerReflection
relation.v1.RelationService

# 访问关注列表
grpcurl -plaintext -d '{"user_id":2}' localhost:9099 relation.v1.RelationService/GetFollowingList
复制代码

参数说明

  • -d 提交的参数, json格式
  • -plaintext 使用纯文本连接,跳过TLS

也可以使用以下工具进行本地测试

作者:如来神掌
链接:juejin.cn/post/718945…
来源:稀土掘金
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。