gRPC+ProtoBuf

gRPC+ProtoBuf-微服务传输协议

微服务中,常见的传输协议有HTTP+JsongRPC+ProtoBuf

HTTP+Json一样,gRPC+ProtoBuf同样适用于跨语言传输。前提是,使用相同的协议原文件(.proto)生成各自的协议文件(.pb.go\.pb.cc\.java)

协议格式

user.proto

// proto 协议版本
syntax = "proto3";
package user;

// 包路径
option go_package = "common/proto/user";

// 编写方法
service UserService {
    
    
  // 获取列表
  rpc GetUserList(GetUserListReq) returns(GetUserListRes) {
    
    }
  // ...
}

// 请求体
message GetUserListReq{
    
    
  // 请求参数
  // 类型   参数名    参数序号(从1开始,不能重复)
  // 序号是协议的一部分,并不会对性能有过多影响,不重复即可
  int64 Page = 1;
  int64 PageSize = 2;
  int64 Sit = 3;
}


message GetUserListRes{
    
    
  int32 ErrCode = 1;
  string ErrMsg = 2;
  // repeated 表名是数组
  repeated SysUser sysUsers = 3;
  int32 Total = 4;
}

// 结构体可循环引用
message SysUser{
    
    
  string ID = 1;
  string CreatedAt = 2;
  string UpdatedAt = 3;
  string DeletedAt = 4;
  string UUID = 5;
  string Username = 6;
  string Password = 7;
  string NickName = 8;
  string HeaderImg = 9;
}

编译命令

# Go
protoc -I . --go_out=. ./common/proto/user/user.proto
# Java
protoc -I . --java_out=. ./common/proto/user/user.proto
# C++
protoc -I . --cpp_out=. ./common/proto/user/user.proto

编译

其中分别为Java\c++\go的编译后文件。
user.proto为原协议文件。
使用相同的源协议文件,才能跨语言通讯。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/LitongZero/article/details/109402632