Solución:
De los documentos oficiales:
Los mensajes AMQP también tienen una carga útil (los datos que transportan), que los agentes de AMQP tratan como una matriz de bytes opaca. El corredor no inspeccionará ni modificará la carga útil. Es posible que los mensajes solo contengan atributos y no contengan carga útil. Es común utilizar formatos de serialización como JSON, Thrift, Protocol Buffers y MessagePack para serializar datos estructurados con el fin de publicarlos como carga útil del mensaje. Los pares de AMQP suelen utilizar los campos “tipo de contenido” y “codificación de contenido” para comunicar esta información, pero esto es solo por convención.
Entonces, básicamente, RabbitMQ no tiene conocimiento sobre JSON, todos los mensajes son solo matrices de bytes.
De NodeJS
Contexto:
Si queremos enviar un objeto JSON como mensaje, es posible que obtengamos el siguiente error:
El primer argumento debe ser de tipo cadena o una instancia de Buffer, ArrayBuffer o Array o un objeto tipo Array. Recibió una instancia de Object
Entonces, podemos convertir la carga útil JSON como una cadena y analizarla en el trabajador. Cadenaizamos el objeto JSON antes de enviar los datos a la cola.
let payloadAsString = JSON.stringify(payload);
Y desde el final del trabajador, podemos JSON.parse
let payload = JSON.parse(msg.content.toString());
//then access the object as we normally do, i.e. :
let id = payload.id;