嗨,我有一个适用于“事件”的数据流管道。这些事件是简单的协议缓冲区消息,例如:
message OrderCoffee {
int32 id = 1;
}
message CancelOrder {
int32 id = 1;
}
然后客户端对这些消息进行序列化/编码并将它们推送到消息代理(例如Google Pub/Sub
)。订阅者使用一条消息并尝试解码/反序列化(伪代码):
decoded_message = OrderCoffe.decode(encoded_message)
decoded_message = CancelOrder.decode(encoded_message)
这些线路中的哪一条有效?两者,至少在我的 Ruby 代码中。我不知道我是否对如何使用协议缓冲区有概念上的误解,或者那是一个 ruby 错误。
如果这是预期的行为,我怎么知道在运行时我应该对收到的消息进行解码?
编辑:
好的,解决方案似乎是https://developers.google.com/protocol-buffers/docs/techniques?csw=1#self-description。
虽然我无法理解。有人可以提供一个如何在 ruby 中实现它的例子吗?