我们正在使用 proto3 创建一个 grpc 服务器。并将其编译为 ruby 函数。我们使用 ActiveRecord-Protobuf gem 将 Active Record 消息转换为 protobuf 消息(通过调用“activerecord”.to_proto 方法获得)。然而,在创建 protobuf 消息以创建 ruby 服务器时,我们无法传递“activerecord”.to_proto 消息,因为在定义输入值的类型时我们别无选择,只能将其定义为 proto3 中的消息,因此它只接受一个哈希值。为此,我们必须将 .to_proto 对象转换为“activerecord”.to_proto.to_hash。这是徒劳的,并且降低了 grpc 的最优性。具有讽刺意味的是,我们正在转向 grpc 以获得最优性。您能否建议如何定义 protobuf 消息(使用 proto3)以确保“活动记录”。
这是活动记录对象。
class AppPreferenceMessage < ::Protobuf::Message
optional ::Protobuf::Field::Int64Field, :id, 1
optional ::Protobuf::Field::StringField, :preference_key, 2
optional ::Protobuf::Field::StringField, :value, 3
optional ::Protobuf::Field::StringField, :value_type, 4
optional ::Protobuf::Field::Int64Field, :vaccount_id, 5
end
这被转换为 AppPreference.last.to_proto ,这是一个按类的 protobuf 消息。
我对 ruby 输入参数的 protobuf 定义如下。
syntax="proto3";
service App_Preferences{
rpc Index(Empty) returns (Index_Output){}
}
message Index_Output{
int64 id=1;
string preference_key=2;
string value=3;
string value_type=4;
int64 vaccount_id = 5;
}
此参数“Index_Output”仅接受 AppPreference.last.to_proto.to_hash 但我希望它接受 AppPreference.last.to_proto 作为输入。我如何更改我的 protobuf 代码。