Привет! У меня есть конвейер потока данных, который работает над «событиями».Эти события являются простыми сообщениями буфера протокола, скажем:
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.Я не знаю, есть ли у меня концептуальное недоразумение о том, как использовать буферы протокола, или это ошибка в рубине.
Если это ожидаемое поведение, как я могу узнать во время выполнения, какое сообщение я должен декодировать полученное сообщение?
РЕДАКТИРОВАТЬ:
Хорошо, решение похоже на https://developers.google.com/protocol-buffers/docs/techniques?csw=1#self-description.
Я не мог понять, хотя.Может ли кто-нибудь привести пример того, как реализовать это в ruby?