protobuf语法
文件格式
.proto
版本设定
# 可选proto2 ,主流一般都是用 proto3
syntax = "proto3";
注释
单行 #
多行 /* */
与java语言相关的语法
# 后续 protobuf 生成的java代码,是在同一源文件,还是多个源文件中
option java_multiple_files = true;
# 指定 protobuf 生成的类 放在什么包下面
option java_package = "com.xx.xx";
# 指定 protobuf 生成的外部类的名字(管理内部类【内部类才是真正开发使用的】)
option java_outer_classname = "HelloWorldService";
逻辑包(了解,一般不用)
# 对于 protobuf 对于文件内容的管理
package xxx;
导入其他 proto 文件
UserService.proto
OrderService.proto
import "xxx/UserService.proto";
基本类型
枚举类型
消息message
message LoginRequest {
string username = 1;
singular string password = 2;
int32 age = 3;
}
// 编号 从 1 - 2^29-1 ;注意:19000 - 19999 不能用这个区间内的编号,因为这个是 protobuf 的保留编号
// - singular : 这个字段的值只能是 0 或 1 个(默认关键字) null
// - repeated
message Result {
string content = 1;
repeated string status = 2; // 这个字段返回值是多个,等价于 java list protobuf getStatusList() -> list
}
服务
service HelloService{
rpc hello(HelloRequest) returns(HelloReponse){}
}
# 里面可以定义多个服务方法
# 定义多个服务接口
# gRPC 服务 4 种服务方式
第一个 gRPC 服务
项目结构
1. xxx-api 模块
定义 protobuf idl语言
并通过命令创建具体的代码,后续 client server 引入依赖使用
1. message 消息定义
2. service 服务定义
2. xxx-server 模块
1. 实现 api 模块中定义的服务接口
2. 发布 gRPC 服务 (创建服务端程序)
3. xxx-client 模块
1. 创建服务端 stub(代理)
2. 基于代理 stub 进行 RPC 调用
xxx-server 服务端模块的开发
1. 实现服务接口