Привет, у меня есть конвейер потока данных, который работает с «событиями». Эти события представляют собой простые сообщения буфера протокола, скажем:
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 .
Хотя я не мог понять. Может ли кто-нибудь привести пример того, как реализовать это в рубине?