RabbitMQ和Node.js将消息缓冲区转换为JSON

Kel*_*lly 6 rabbitmq node.js

我有一个node.js应用程序连接到RabbitMQ以接收消息.当消息进来并将它输出到控制台时,我得到: {data:<Buffer 62 6c 61 68>,contentType:undefined}

如何从中获取正确的JSON或字符串?这是我的例子:

var amqp = require('amqp');

var connection = amqp.createConnection({ host: 'localhost' });

process.on('uncaughtException', function(err) {
  console.error(err.stack);
});

connection.on('ready', function () {
    // Use the default 'amq.topic' exchange
    connection.queue('my-queue', function(q){   
        q.bind('#');

        q.subscribe(function (message) {                
            console.log(message);
        });
    });
});
Run Code Online (Sandbox Code Playgroud)

使用RabbitMQ管理控制台发送消息(目前用于测试目的).在这个例子中,我发送了一个简单的消息,主题为"test",正文为"blah".

我是Node.js的新手,但我已经尝试过了

console.log(message.toJSON());
Run Code Online (Sandbox Code Playgroud)

我一无所获 甚至没有错误消息.(不知道如何解决问题)

console.log(message.toString());
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我得到[对象],这没有帮助

console.log(JSON.parse(message.toString('utf8')));
Run Code Online (Sandbox Code Playgroud)

也什么也没做,我没有得到任何错误信息.我认为它失败但为什么我没有得到例外我不知道.

Lib*_*hew 11

如果您使用的是amqplib,则以下代码可以解决问题.

sender.js文件中,我将数据转换为JSON字符串

var data = [{
   name: '********',
   company: 'JP Morgan',
   designation: 'Senior Application Engineer'
}];

ch.sendToQueue(q, Buffer.from(JSON.stringify(data)));
Run Code Online (Sandbox Code Playgroud)

receiver.js中,我使用下面的代码来打印队列中的内容.在这里,我将msg.content解析为JSON格式.

ch.consume(q, function(msg) {
   console.log(" [x] Received");
   console.log(JSON.parse(msg.content));
}, {noAck: true});
Run Code Online (Sandbox Code Playgroud)

  • 您可能要使用`Buffer.from()`而不是`new Buffer()`,因为它已被弃用。 (2认同)

Kel*_*lly 9

答案就在我面前.如果其他人有同样的问题,请保留此解决方案,但解决方案是:

console.log(message.data.toString('utf8'));
Run Code Online (Sandbox Code Playgroud)

我正在获取对象并尝试将其全部转换而不是数据属性.