概要用户服务基本是每个互联网产品里必备的一个服务了 , 因为没有用户基本是什么也干不了 。所以他的重要性不言而喻 。本文主要介绍下如何开发一个用户微服务,以及他的详细开发流程 。
目录
- Go微服务实战 - 从0到1搭建一个类Instagram应用(持续更新)
- Go微服务实战 - 用户服务(gRPC+Protocol Buffer)
- Go微服务实战 - 关系服务服务(gRPC+Protocol Buffer)
- Go微服务实战 - 动态服务(gRPC+Protocol Buffer)
- Go微服务实战 - 聚合服务(http)
文章插图
技术栈
- Go
- Eagle 开发框架
- Redis
- MySQL
- Gorm
- docker
- kubernetes
文章插图
开发步骤这里详细的记录了开发的步骤,方便参看本项目的同学知道其实现过程 。
1、生成proto模板文件
eagle proto add api/user/v1/user.proto
内容如下syntax = "proto3";package api.user.v1;option go_package = "github.com/go-microservice/user-service/api/user/v1;v1";option java_multiple_files = true;option java_package = "api.user.v1";service UserService { rpc CreateUser (CreateUserRequest) returns (CreateUserReply); rpc UpdateUser (UpdateUserRequest) returns (UpdateUserReply); rpc DeleteUser (DeleteUserRequest) returns (DeleteUserReply); rpc GetUser (GetUserRequest) returns (GetUserReply); rpc ListUser (ListUser1Request) returns (ListUserReply);}message CreateUser1Request {}message CreateUser1Reply {}message UpdateUserRequest {}message UpdateUserReply {}message DeleteUserRequest {}message DeleteUserReply {}message GetUserRequest {}message GetUserReply {}message ListUserRequest {}message ListUserReply {}
2、为proto填充业务方法及字段定义vim api/user/v1/user.proto
3、生成pb文件# 生成所有protomake grpc# 或者# 生成指定proto的pb文件eagle proto client api/user/v1/user.proto# Outputll api/user/v1/user.pb.go #新增user.protouser_grpc.pb.go #新增
会生成两个文件 api/user/v1/user.pb.go
和 api/user/v1/user.pb.go
4、生成server骨架代码
# 生成骨架代码eagle proto server api/user/v1/user.proto# 默认会输出到 internal/service# 如果需要指定到对应的目录,可以使用 -t 参数, eg:# eagle proto server -t internal/logic# 查看internal/service/user_svc.go
5、注册服务到gRPC Server// internal/server/grpc.go import (...v1 "github.com/go-microservice/user-service/api/user/v1"...)...// NewGRPCServer creates a gRPC serverfunc NewGRPCServer( cfg *app.ServerConfig, // 新增 svc *service.UserServiceServer,) *grpc.Server { grpcServer := grpc.NewServer(grpc.Network("tcp"),grpc.Address(cfg.WriteTimeout),grpc.Timeout(cfg.WriteTimeout), ) // register biz service // 新增 v1.RegisterUserServiceServer(grpcServer, svc) return grpcServer}
6、在生成的server中编写业务逻辑// vim internal/service/user_svc.gopackage serviceimport ( "context" pb "github.com/go-microservice/moment-service/api/user/v1")var ( _ pb.UserServiceServer = (*UserServiceServer)(nil))type UserServiceServer struct { pb.UnimplementedUserServiceServer}func NewUserServiceServer() *UserServiceServer { return &UserServiceServer{}}func (s *UserServiceServer) CreateUser(ctx context.Context, req *pb.CreateUserRequest) (*pb.CreateUserReply, error) { return &pb.CreateUserReply{}, nil}func (s *UserServiceServer) UpdateUser(ctx context.Context, req *pb.UpdateUserRequest) (*pb.UpdateUserReply, error) { return &pb.UpdateUserReply{}, nil}func (s *UserServiceServer) DeleteUser(ctx context.Context, req *pb.DeleteUserRequest) (*pb.DeleteUserReply, error) { return &pb.DeleteUserReply{}, nil}func (s *UserServiceServer) GetUser(ctx context.Context, req *pb.GetUserRequest) (*pb.GetUserReply, error) { return &pb.GetUserReply{}, nil}func (s *UserServiceServer) ListUser(ctx context.Context, req *pb.ListUserRequest) (*pb.ListUserReply, error) { return &pb.ListUserReply{}, nil}
后面就可以在这里补充具体的业务逻辑处理了 。7、启动服务
# 在根目录下运行go run main.go
确保运行gRPC server// main.go...eagle.WithServer( // init gRPC server gs,),...
8、接口调试调试工具,这里使用
[grpcurl](https://github.com/fullstorydev/grpcurl)
# 查看服务列表grpcurl -plaintext localhost:9090 list# Outputapi.user.v1.UserServicegrpc.health.v1.Healthgrpc.reflection.v1alpha.ServerReflection# 访问列表grpcurl -plaintext -d '{"user_id":2}' localhost:9090 api.user.v1.UserService/ListUser
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 「Tubian」Tubian0.41!支持Windows QQ微信!
- Tubian0.43,完善对QQ微信的支持
- 解除安全模式最简单方法(微信连续闪退进入安全模式怎么办)
- WSL 2 上启用微软官方支持的 systemd
- 微信朋友圈怎么转发别人分享的链接、图片、文章
- 怎么转发微信朋友圈(怎样转发别人发的朋友圈)
- 怎样把信息转发微信朋友圈(朋友发的朋友圈怎么转发)
- 微信朋友圈图文怎么一键转发(连图带文字一键转发朋友圈软件)
- 如何在微信的朋友圈转发己发过的东西(微信怎么转发别人以前发的朋友圈)
- 微信怎么转发朋友圈(微信怎么发朋友圈)