分离(特定于 Go 的)协议缓冲区中服务中使用的消息声明的最佳做法是什么?上下文是具有多个 gRPC 服务的大型应用程序。某些消息在多个服务中使用。我们的想法是划分消息和服务的定义,就像这样(简化一点):
airline/pb/airline_messages.proto:
syntax = "proto3";
option go_package = "github.com/example.com/example-repo/airline/pb";
message Airline {
string code = 1;
string name = 2;
string country = 3;
}
airline/pb/airline_services.proto:
syntax = "proto3";
option go_package = "github.com/example.com/example-repo/airline/pb";
import "airline/pb/airline_messages.proto"
service AirlineService {
rpc GetAirline(string) returns (Airline) {}
rpc GetAirlines(GetAirlinesRequest) returns (repeated Airline) {}
}
message GetAirlinesRequest {
int max = 1;
string country = 2;
string pattern = 3;
string sortby = 4;
}
我这样打电话:protoc
protoc --go_out=. \
--go_opt=paths=source_relative \
--go-grpc_out=. \
--go-grpc_opt=paths=source_relative \
--proto_path=. \
--proto_path=../../ airline_services.proto
这不起作用,因为未定义。像这样调用它:Airline
protoc ... airline_services.proto airline_messages.proto
生成一条错误消息,即航空公司被乘以定义。这样做:
protoc ... airline_messages.proto
protoc ... airline_services.proto
只是覆盖了Go文件,相当于编译。airline_services.proto
能够在多个服务中重用消息定义的最佳实践是什么?
喵喵时光机
相关分类