Protocol buffers 我可以将gRPC协议定义合成多个协议文件吗?

Protocol buffers 我可以将gRPC协议定义合成多个协议文件吗?,protocol-buffers,grpc,Protocol Buffers,Grpc,我有一个这样的GRPCAPI定义(来自Akka文档示例),但要长得多(4000行,仅是服务部分) 服务迎宾服务{ rpc SayHello(HelloRequest)返回(HelloReply){} rpc-ItKeepsTalking(流HelloRequest)返回(HelloReply){ rpc ItKeepsReplying(HelloRequest)返回(流HelloReply){} rpc StreamHellos(stream HelloRequest)返回(stream Hel

我有一个这样的GRPCAPI定义(来自Akka文档示例),但要长得多(4000行,仅是
服务
部分)

服务迎宾服务{
rpc SayHello(HelloRequest)返回(HelloReply){}
rpc-ItKeepsTalking(流HelloRequest)返回(HelloReply){
rpc ItKeepsReplying(HelloRequest)返回(流HelloReply){}
rpc StreamHellos(stream HelloRequest)返回(stream HelloReply){}
}
但是,RPC列表现在增长得太长了,我想以某种方式将其“分解”为多个文件,以便该文件更具可读性。像这样的

//文件1:
服务接线员{
rpc SayHello(HelloRequest)返回(HelloReply){}
rpc-ItKeepsTalking(流HelloRequest)返回(HelloReply){
}
//文件2:
服务接线员服务部{
rpc ItKeepsReplying(HelloRequest)返回(流HelloReply){}
rpc StreamHellos(stream HelloRequest)返回(stream HelloReply){}
}
//主原始文件:
导入“文件1”
导入“文件2”
服务GreeterService=GreeterServicePartA+GreeterServicePartB
即使只是在不同的文件中分别定义RPC,然后编写类似的内容也会对我有所帮助:

服务迎宾服务{
rpc SayHello=importedSayHello
rpc itkeeptalking=导入的keeptalking
rpc ItKeepsReplying=导入的KeepsReplying
rpc StreamHellos=导入的StreamHellos
}

有没有可能在gRPC协议定义中以某种方式“组合”这样的服务?

您不应该有这么大的服务。如果它已经发展到4000行的话,听起来就像是所有方法的垃圾场。我希望大部分都是文档。。。通常,我会期望更多基于更大API子集的服务。例如,假设我有MyAndroidAppService,它可以成为一个垃圾场。但是我可以把它设计成MyAndroidAppConfigService、MyAndroidAppNotificationService、MyAndroidAppChatService(假设是一个包含很多方法的非常复杂的应用程序)

但是既然你已经有了这样的服务,你能做些什么呢?不能将
服务
定义拆分为多个文件。如果将服务定义拆分为多个新服务,将破坏gRPC的有线兼容性

您最多只能将
消息
定义移动到一个单独的文件中,然后使用普通文件。由于将消息移动到其他文件可能会导致生成的代码中的API不兼容,因此可以使用
import public“path/to/messages.proto”