当前位置: 首页 > 知识库问答 >
问题:

如何定义protobuf消息,通过编译protomsg将活动记录protobuf消息作为输入参数直接传递到ruby grpc代码中?

拓拔弘化
2023-03-14

我们正在使用proto3创建grpc服务器。并将其编译成ruby函数。我们已经使用activerecord protobuf gem将活动记录消息转换为protobuf消息(通过调用“activerecord.to_proto”方法获得)。然而,在创建protobuf消息以创建ruby服务器时,我们无法传递“activerecord”。在定义输入值的类型时,我们没有别的办法,只能将它定义为proto3中的消息,因此它只接受散列值。为了这一点,我们必须转换我们的。将proto对象添加到“activerecord”。去普罗托。去做杂烩。这是徒劳的,降低了grpc的最佳性。具有讽刺意味的是,我们正转向grpc以获得其最佳性。您能否建议如何定义protobuf消息(使用proto3)以确保“activerecord”。to_proto消息与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这是一个按类的协议包消息。

我的ruby输入参数的协议定义如下。

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作为输入。我如何改变我的协议buf代码。

共有1个答案

王亮
2023-03-14

我想你想把这个AppPreferenceMessage对象转换成protobuf消息,然后把它传递给一个rpc方法,这个方法是从一个单独的proto文件创建的?我也不知道AppPreferenceMessage是什么。proto返回的是序列化字节吗?

我不确定我是否完全清楚,但听起来你可能不想使用grpc protobuf存根和服务代码生成器,因为它们的设计考虑了ruby protobuf对象的传递。

这里有一些例子html" target="_blank">https://github.com/grpc/grpc/tree/master/examples/ruby/without_protobuf如果您需要跳过grpc protobuf代码生成器,那么这可能很有用。

 类似资料:
  • 我想将protobuf序列化消息转换为人类可读的JSON格式。我面临的主要问题是,我需要这样做,而无需事先将proto描述符编译成Go代码。我有权访问 来自

  • 我正在尝试为Web设置Firebase云消息传递。我成功地对其进行了正确初始化并获得了令牌: manifest.json与gcm_sender_id 我可以看到我在控制台中得到令牌,所以我试图验证它,并通过邮递员发送我的第一个通知-这里是留档。 发布网址:https://fcm.googleapis.com/v1/projects/PROJECTID/messages:发送授权:无授权 标题 Bo

  • 由于内容脚本在网页而不是扩展程序的上下文中运行,因此它们通常需要某种与扩展程序其余部分进行通信的方式。例如,RSS 阅读器扩展程序可以使用内容脚本来检测页面上 RSS 摘要的存在,然后通知后台页面以显示该页面的操作图标。 扩展及其内容脚本之间的通信使用消息传递来实现。任何一方都可以监听从另一端发送的消息,并在同一通道上进行响应。消息可以包含任何有效的 JSON 对象(空,布尔值,数字,字符串,数组

  • ms tcp nodelay 描述: 在信差的 TCP 会话上禁用 nagle 算法。 类型: Boolean 是否必需: No 默认值: true ms initial backoff 描述: 出错时重连的初始等待时间。 类型: Double 是否必需: No 默认值: .2 ms max backoff 描述: 出错重连时等待的最大时间。 类型: Double 是否必需: No 默认值: 15

  • 消息传递 目录 一次简单的请求 h3Name 长时间保持连接 h3Name 扩展之间的消息传递 h3Name 安全策略 h3Name 范例 h3Name API reference Properties propertyName Methods methodName Events eventName Types id For information on how to use experiment

  • 我正在尝试用spring cloud stream实现spring cloud契约。我有一个使用StreamBridge的制作人 方法sendMessage()是从rest控制器调用的。 我的合同是这样的: 当我运行测试时,会调用triggerCreateOrganization()方法,并在日志中看到日志消息“生产组织到主题”。 我在生成的测试的基类上有@AutoConfigureMessage