这是我参与「第三届青训营 -后端场」笔记创作活动的第6篇笔记。
借着我们青训营的契机,笔者在其中认识了一波志同道合的伙伴。我们一起组队完成项目的开发。我们小组选的的是抖音极简版的开发。
上回说到,这篇文章笔者要说说我们项目关于go-micro的一个简单的流程。首先我们从青训营大项目的接口文档中copy出proto数据文件。
syntax = "proto3";
option go_package = "../service";
package user;
service UserService {
rpc Register (douyin_user_register_request) returns (douyin_user_register_response) {}
rpc Login (douyin_user_login_request) returns (douyin_user_login_response){}
rpc UserInfo(douyin_user_request) returns (douyin_user_response){}
}
message douyin_user_request {
int64 user_id = 1; // 用户id
string token = 2; // 用户鉴权token
}
message douyin_user_response {
int32 status_code = 1; // 状态码,0-成功,其他值-失败
string status_msg = 2; // 返回状态描述
User user = 3; // 用户信息
}
message douyin_user_login_request {
string username = 1; // 登录用户名
string password = 2; // 登录密码
}
message douyin_user_login_response {
int32 status_code = 1; // 状态码,0-成功,其他值-失败
string status_msg = 2; // 返回状态描述
int64 user_id = 3; // 用户id
string token = 4; // 用户鉴权token
}
message douyin_user_register_request {
string username = 1; // 注册用户名,最长32个字符
string password = 2; // 密码,最长32个字符
}
message douyin_user_register_response {
int32 status_code = 1; // 状态码,0-成功,其他值-失败
string status_msg = 2; // 返回状态描述
int64 user_id = 3; // 用户id
string token = 4; // 用户鉴权token
}
message User {
int64 id = 1; // 用户id
string name = 2; // 用户名称
int64 follow_count = 3; // 关注总数
int64 follower_count = 4; // 粉丝总数
bool is_follow = 5; // true-已关注,false-未关注
}
整个项目大概设计成4个服务,上文是User服务的proto数据文件。原接口文档使用的是proto2的语法,我们组员认为proto2的规则较为繁琐,于是使用proto3进行定义数据文件。在这里就展示一个服务的数据文件,下一步是要对proto文件进行编译生成go-micro中的pb文件以及pb.micro文件。
组内统一的写法是生成一个build.bat文件,用来执行proto文件的编译。
protoc --proto_path=.^
--go_out ../service --micro_out ../service^
user.proto
其中表示pb文件输出目录为上级目录下的service文件夹中,micro.go文件的输出目录也为上级目录下的service文件夹中。之后查看service文件夹,就可以查看到生成的pb.go和micro.go文件。很多结构体的声明以及服务的生成注册流程方法已经自动生成完毕,接下来要做的就是对于每个服务进行实例操作,把每个服务接口的方法都实现完成,就可以对该服务进行注册。关于服务的注册和初始化配置的内容我们留到下回再续。