2016-12-16 75 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代碼使用。

相關問題