首页 > 解决方案 > 如何在 .NET MessagePack 中序列化并在 Node.js 中反序列化

问题描述

我有一个 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);
        }
    }
}

消费者应用

我正在使用amqplib库读取 Node.js 中的字节,如下所示:

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 });
    });
});

我尝试使用一些 MsgPack 库(如messagepackmsgpack-node等)将有效负载反序列化为 Json 对象……但是,它们似乎没有在 .NET 中提供与我上面显示的相同的库。

问题: 如何将有效负载解压缩并反序列化为 Json 对象?

标签: c#node.jsmsgpacklz4

解决方案


推荐阅读