Невозможно десериализовать двоичный файл protobuf (созданный Nodejs) в Python - PullRequest
0 голосов
/ 30 апреля 2020

Пожалуйста, просмотрите ниже контекст и помогите решить проблему

Я определяю ниже сообщение в device.proto

message DeviceConfiguration {
  message Resolution {
    uint32 width = 1;
    uint32 height = 2;
  }
  string device_name = 1;
  string brand_name = 2;
  Resolution resolution = 3;
}

Затем скомпилируйте это сообщение на 2 языка: Nodejs (device_pb. js) и Python (device_pb2.py)

1. От Nodejs: отправьте вышеуказанное сообщение Кафке

const {DeviceConfiguration} = require("./device_pb")

const resolution = new DeviceConfiguration.Resolution();
resolution.setWidth(1280);
resolution.setHeight(960);

const deviceConfiguration = new DeviceConfiguration();
deviceConfiguration.setDeviceName("S6");
deviceConfiguration.setBrandName("samsung");
deviceConfiguration.setResolution(resolution);

let binaryEvent = deviceConfiguration.serializeBinary();

Наконец, используйте Kafka-узел для отправки значения binaryEvent в топ Кафки c

2. Из компонента Python: получить сообщение через kafka

  • Здесь двоичное значение, полученное в python компонент

b'10,8,111 , 98,106,101,99,116,73,100,26,21,10,2,83,54,18,7,115,97,109,115,117,110,103,26,6,8,128,10,16,192,7 '

  • Затем я использую приведенный ниже код для десериализации сообщения, но оно выдает сообщение «Сообщение об ошибке анализа»

    из device_pb2 import DeviceConfiguration

    device = DeviceConfiguration ()

    device.ParseFromString (message)

=> Поскольку я вижу, что ParseFromString не работает для указанного выше двоичного значения и выдает «Ошибка разбора» сообщение". Это работает только в том случае, если значение в байтах создается кодом SerializeToString python.

Обратите внимание: я могу десериализовать двоичный файл с помощью deserializeBinary (сделать его опубликованным c) в Nodejs, но подобной функции нет in device_pb2.py

Итак, могу ли я десериализовать сообщение в Python коде?

Большое спасибо.

...