Как я могу отправить сообщение gRPC, формат которого определяется во время выполнения? - PullRequest
0 голосов
/ 17 сентября 2018

Меня в первую очередь интересует это на Java, но было бы полезно найти решение на любом языке.

Согласно различной документации, которую я читаю, рабочий процесс по умолчанию с gRPC равен

  • Записать .proto файл
  • Создать код клиента и / или сервера из этого файла
  • Напишите вашу программу и скомпилируйте ее вместе с сгенерированным кодом

Я хочу программно прочитать схему сообщения (из файла .proto или каким-либо другим способом), а затем отправить некоторые данные, расположенные в соответствии с этой схемой, на какой-либо адрес.

Единственный способ сделать это прямо сейчас - это выложить, сгенерировать код во временном каталоге, вызвать компилятор, загрузить скомпилированный код и использовать отражение, чтобы получить нужные функции.

Это звучит как экстремальный взлом для меня. Есть ли более простой вариант?

1 Ответ

0 голосов
/ 17 сентября 2018

В gRPC Java сгенерированный код и прототипы являются необязательными, и на самом деле они вам не нужны (хотя они удобны).Чтобы динамически интерпретировать сообщение, вам нужно определить свой собственный Marshaller , который работает с InputStream для доступа к необработанным байтам сообщения.Отсюда вы можете буферизовать их в массив и решить, как их анализировать.

В качестве аналогичного упражнения я написал более подробное руководство по использованию JSON с gRPC .Принцип должен быть таким же для вашего кода.

...