将嵌套对象的数组转换为buffer nodejs



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代码。

最新更新