2016-12-16 169 views
1

1)为什么?我需要通过缓冲区的RabbitMQ,发布方法http://www.squaremobius.net/amqp.node/channel_api.html#channel_publish
2)我的数据看起来像下面这样将嵌套对象的数组转换为Buffer Nodejs

[ // array of objects 
    { 
    id: 1, 
    name: 'John Doe', 
    prop: { 
     a: [....], // nested 
     b: [....], 
     c: {...} 
    } 
    }, 
    ... 
] 

如何正确地转换这样的对象数组缓冲,所以从另一个侧面可以解析回来。

+0

'Buffer.from(JSON.stringify(thing))'?? – georg

+0

是的!谢谢 !! –

回答

2

1)为什么?

https://www.rabbitmq.com/tutorials/amqp-concepts.html#messages

AMQP消息也有一个有效载荷(即它们携带的数据),其AMQP经纪人当作一个不透明的字节数组。经纪人不会检查或修改有效载荷。消息可能只包含属性而没有有效载荷。使用JSON,Thrift,Protocol Buffers和MessagePack等序列化格式来序列化结构化数据以便将其发布为消息有效载荷是很常见的。 AMQP同伴通常使用“内容类型”和“内容编码”字段来传达这些信息,但这只是惯例而已。

TL; DR版本是RabbitMQ不知道您的数据或它的格式/编码方式。它将您的消息视为一个字节数组,需要您处理编码。

amqp.node库希望你传递一个缓冲区,因为这是Node.js处理字节数组转换的最简单方法,就像RabbitMQ所期望的那样。

如何正确地将这样的对象数组转换为缓冲区,所以从另一端可以解析回来。

在邮件制作者,你需要的信息数据转换成JSON字符串(文件),然后从该create a buffer

var data = [ ... ]; 
var json = JSON.stringify(data); 
var buffer = Buffer.from(json); 

在消息消费者身边,你会做相反,使用消息bodyturn the buffer into a string,第一。

var json = message.body.toString(); 
var data = JSON.parse(json); 

在这一点上,你data对象应该是你想要的数据的阵列,为您的Node.js代码使用。

相关问题