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);
在消息消費者身邊,你會做相反,使用消息body
和turn the buffer into a string,第一。
var json = message.body.toString();
var data = JSON.parse(json);
在這一點上,你data
對象應該是你想要的數據的陣列,爲您的Node.js代碼使用。
'Buffer.from(JSON.stringify(thing))'?? – georg
是的!謝謝 !! –