1)为什么?我需要通行缓冲区到兔子,发布方法http://www.squaremobius.net/amqp.node/channel_api.html#channel_publish
2)我的数据如下
[ // array of objects
{
id: 1,
name: 'John Doe',
prop: {
a: [....], // nested
b: [....],
c: {...}
}
},
...
]
如何正确地将类似的对象数组转换为缓冲区,因此从另一侧可以解析。
1)为什么?
来自https://www.rabbitmq.com/tutorials/amqp-concepts.html#messages
AMQP消息还具有有效载荷(他们携带的数据),AMQP经纪人将其视为不透明的字节数组。经纪人不会检查或修改有效载荷。消息可能仅包含属性,而没有有效载荷。使用JSON,Thrift,协议缓冲区和MessagePack等序列化格式来序列化结构化数据以将其发布为消息有效载荷。AMQP同行通常使用" content-type"one_answers" content-insoding"字段来传达此信息,但这仅按照惯例。
tl; dr版本的版本是,RabbitMQ对您的数据不了解或如何格式/编码。它将您的消息视为字节数组,要求您处理编码。
amqp.node
库希望您通过缓冲区进行缓冲,因为这是Node.js处理往返字节阵列的翻译的最简单方法,就像RabbitMQ所期望的那样。
如何正确地将类似的对象数组转换为缓冲区,因此从另一侧可以解析。
在您的消息生产者中,您需要将消息数据转换为JSON字符串(文档),然后从中创建一个缓冲区。
var data = [ ... ];
var json = JSON.stringify(data);
var buffer = Buffer.from(json);
在消息消费者端,您将使用消息body
进行相反的操作,然后将缓冲区变成字符串,首先。
var json = message.body.toString();
var data = JSON.parse(json);
此时,您的 data
对象应该是您想要的数据数组,用于使用node.js代码。