gRPC ist ein High-Performance-RPC-Framework von Google. Protobuf-Serialisierung, HTTP/2, Streaming, Code-Generierung.
Protobuf-Definition¶
syntax = “proto3”; package user; option go_package = “./pb”; service UserService { rpc GetUser(GetUserRequest) returns (User); rpc ListUsers(ListUsersRequest) returns (stream User); } message User { int32 id = 1; string name = 2; string email = 3; } message GetUserRequest { int32 id = 1; } message ListUsersRequest { int32 limit = 1; }
Go-Server¶
type server struct { pb.UnimplementedUserServiceServer } func (s *server) GetUser(ctx context.Context, req *pb.GetUserRequest) (*pb.User, error) { user, err := db.FindUser(req.Id) if err != nil { return nil, status.Errorf(codes.NotFound, “user not found”) } return &pb.User{Id: user.ID, Name: user.Name, Email: user.Email}, nil } func main() { lis, _ := net.Listen(“tcp”, “:50051”) s := grpc.NewServer() pb.RegisterUserServiceServer(s, &server{}) s.Serve(lis) }
Wichtigste Erkenntnis¶
gRPC für Microservice-Kommunikation — schneller als REST, typsicher, Streaming. Protobuf = Schema.