Как сериализовать в .NET MessagePack и десериализовать в Node.js - PullRequest
0 голосов
/ 25 марта 2019

У меня есть очередь RabbitMQ и два приложения. Первое приложение написано в ядре .NET для генерации отправки полезной нагрузки в очередь, а второе находится в Node.js для чтения из очереди.

Приложение производителя

Я использую MessagePack-CSharp для сериализации и сжатия (LZ4) полезной нагрузки. Вот код сериализации в .NET:

using MessagePack;

namespace uBeac.Serialization
{
    public class MessageSerilizer
    {
        public static byte[] Serialize(object message)
        {
            MessagePackSerializer.SetDefaultResolver(MessagePack.Resolvers.ContractlessStandardResolver.Instance);
            return LZ4MessagePackSerializer.Serialize(message);
        }
    }
}

Потребительская заявка

Я читаю байты в Node.js, используя amqplib библиотеку, как показано ниже:

var amqp = require('amqplib/callback_api');

amqp.connect('amqp://...................', function (err, conn) {
    conn.createChannel(function (err, ch) {
        var queueName = 'toProcessor';
        ch.assertQueue(queueName, { durable: false });
        ch.prefetch(1);
        console.log(" [*] Waiting for messages in %s. To exit press CTRL+C", queueName);
        ch.consume(queueName, function (msg) {
            var secs = msg.content.toString().split('.').length - 1;
            console.log(" [x] Received %s", msg.content.toString());
            setTimeout(function () {
                console.log(" [x] Done");
                ch.ack(msg);
            }, secs * 1000);
        }, { noAck: false });
    });
});

Я пытался десериализовать полезную нагрузку для объекта Json, используя некоторые библиотеки MsgPack, такие как messagepack , msgpack-node , ... Но, похоже, они не предоставляют такая же библиотека в .NET, как я показал выше.

Вопрос: Как распаковать и десериализовать полезную нагрузку для объекта Json?

...