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

16

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

目前为了测试目的,消息是通过RabbitMQ管理控制台发送的。在这个例子中,我发送了一个主题为“test”,内容为“blah”的简单消息。

虽然我对Node.js不太熟悉,但我已经尝试过

console.log(message.toJSON());

我什么也没得到,甚至没有错误信息。(不确定如何捕获问题)

console.log(message.toString());

我执行此操作时,会得到 [object Object] 的结果,但这并没有帮助

console.log(JSON.parse(message.toString('utf8')));

同样没有效果,且我没有收到任何错误信息。我猜测它失败了,但为什么我没有收到异常消息是我不知道的。

3个回答

27

如果您正在使用 amqplib,则以下代码可以解决该问题。

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

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

ch.sendToQueue(q, Buffer.from(JSON.stringify(data)));

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

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

很好的想法是将其“字符串化”,然后由消费者进行“解析”。感谢您的提示! - Derek Chia
2
您可能希望使用 Buffer.from() 代替 new Buffer(),因为后者已经被弃用。 - Idan Dagan

15

答案就在我面前。我把这个留在这里,以防其他人遇到同样的问题,但解决方案是:

console.log(message.data.toString('utf8'));

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


4
var obj=JSON.parse( msg.content.toString())
console.log(obj.name);

考虑数据如下:
var details={'name':'Stack','Age':18}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接