使用Grpc生成Java端代码
使用gRPC生成Java代码
在项目中有使用到gRPC来进行端到端的通信,下面的文章是假定你已经编写好了proto文件,等待生成Java代码进行调用。
gRPC实现了一套跨语言跨平台的通信协议,名为protobuf ,它是一种IDL语言,用于序列化数据。既然是跨平台和跨语言,那么protobuf就要提供手段去生成各个语言都能识别的代码,这样才能进行通信。
如果不选择生成代码的方式进行通信而选择为每一个语言维护一个库的话,维护成本太高了。
在官方文档中,有对protocol协议的描述以及对各个语言生成代码的描述,现在我对Java端的生成代码进行具体描述。
生成代码步骤
使用protobuf生成java代码时需要有下面的步骤:
- 生成服务代码
- 生成服务所需模型的代码
- 生成grpc接口代码
在上面步骤中需要依赖2个工具,上面第1点和第2点依赖protoc工具,第3点依赖一个插件:protoc-gen-grpc-java。该插件是专门用于生成Java接口服务的grpc插件。
生成服务代码
这里的服务指的是proto文件中service语句块,类似如下:
1 | |
一个proto文件中只能有一个service语句块,所以一个proto文件中就代表着一个rpc服务,有若干个接口。
现在使用protoc来生成服务代码,使用以下命令:
1 | |
–java_out 选项表示生成代码的上级目录
–proto_path 选项表示存放peoto文件的目录
在命令的最后跟上需要生成代码的单个proto文件
具体代码命令如下,下面命令就代表着在将以当前目录下的proto/service/Boat.proto文件为目标,生成Java代码到当前目录的java目录下。
1 | |
生成服务所需模型代码
注意,该步骤所需要的命令与生成服务代码的命令是一样的,只不过后面命令跟的文件就不是service代码块所在的proto文件了,而是单个模型文件
1 | |
生成gRPC接口代码
这步骤需要依赖一个protoc的插件:protoc-gen-grpc-java。下载版本之后将下载下来的程序进行改名
1 | |
将protoc-gen-grpc-java拷贝到/usr/bin 下之后,就使用以下命令生成接口代码
1 | |
–plugin 选项表示要使用的插件,这里填上刚才下载的插件
–grpc-java_out 选项与 –java_out 一致
–proto_path 选项表示proto文件存放的目录
命令的最后跟上要生成接口的servcie proto文件