Можно ли кодировать с одной схемой и декодировать с другой с помощью AVS c (AVRO с nodejs)? - PullRequest
0 голосов
/ 22 марта 2020

Я новичок в Avro и использую библиотеку avs c. Мой код выглядит так -

const avro = require('avsc');

const typeV1 = avro.Type.forSchema({
    type: 'record',
    fields: [
    {name: 'kind', type: {type: 'enum', symbols: ['CAT', 'DOG']}},
    {name: 'name', type: 'string'}
    ]
});

const typeV2 = avro.Type.forSchema({
    type: 'record',
    fields: [
        {name: 'kind', type: {type: 'enum', symbols: ['CAT', 'DOG']}}
    ]
});

const buf = typeV1.toBuffer({kind: 'CAT', name: 'Albert'});
const valV1 = typeV1.fromBuffer(buf);
const valv2 = typeV2.fromBuffer(buf);

Насколько я понимаю, я могу использовать Avro (и avs c) для кодирования сообщения с использованием одной схемы (typeV1) и декодирования с использованием другой (typeV2). Но я получаю следующую ошибку при запуске typeV2.fromBuffer(buf):

 throw new Error('trailing data');
^

Error: trailing data
at RecordType.Type.fromBuffer (C:\workspace\avroDemo\node_modules\avsc\lib\types.js:600:11)
at Object.<anonymous> (C:\workspace\avroDemo\avro\avro.js:20:24)
at Module._compile (internal/modules/cjs/loader.js:688:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10)
at Module.load (internal/modules/cjs/loader.js:598:32)
at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
at Function.Module._load (internal/modules/cjs/loader.js:529:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:741:12)
at startup (internal/bootstrap/node.js:285:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:739:3)
...