Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

275
Views
Cómo convertir el mensaje amqp enviado como Buffer.from a Java String

Tengo 2 servicios que se comunican a través de AMQP. Uno usa Javascript con amqplib para enviar un mensajeObjeto {"message":"Success"} como este:

 channel.sendToQueue(queueName, Buffer.from(JSON.stringify(messageObject)));

El servicio Java consume el mensaje usando spring rabbit de esta manera:

 @RabbitListener(queues = QUEUE_NAME) public void receiveMessageQueue(String message) {

el contenido de ese mensaje es una cadena que representa una matriz de bytes. Traté de convertirlo usando la respuesta publicada aquí Funciona para el 95% del mensaje Pero mi resultado aún contiene algunos caracteres ininteligibles. Parece que no puede traducir { y }

 \u0017 "message":"Success" \f

Así que me pregunto si debería cambiar algo en el lado del remitente o en el lado del receptor. Prefiero cambiar el lado del remitente ya que tengo muchos servicios de Java que esperan que una cadena JSON lista para usar se analice en objetos y no quiero tener que actualizarlos todos y convertir los mensajes.

EDITAR Esta publicación de SO mencionada por SMA no ayudó. La cadena resultante es exactamente la misma que la entrada:

 "123,34,106,111,98,73,100,34,58,34,52,54,99,51,101,100,53,54,45,49,101,52,99,45,52,101,49,101,45,97,56,55,55,45,50,55,100,54,53,102,56,50,55,48,51,48,34,44,34,109,101,115,115,97,103,101,34,58,34,83,117,99,99,101,115,115,102,117,108,108,121,32,115,117,98,109,105,116,116,101,100,32,116,111,32,112,46,118,100,115,105,116,116,64,100,105,97,108,111,103,119,111,114,107,115,46,100,101,34,125"

Todo lo que puedo hacer ahora es:

 private String convert(String byteString) { String[] byteValues = byteString.substring(1, byteString.length() - 1).split(","); byte[] bytes = new byte[byteValues.length]; for (int i=0, len=bytes.length; i<len; i++) { bytes[i] = Byte.parseByte(byteValues[i].trim()); } return new String(bytes).replace('\u0017','{').replace('\f','}'); }

pero eso parece demasiado hackish. Parece que debería haber una solución fácil para comunicar una cadena JSON entre javascript y java usando amqp.

SOLUCIÓN

Encontré una manera de enviar el mensaje de manera que Spring Rabbit lo entienda:

 channel.sendToQueue(queueName, Buffer.from(JSON.stringify(messageObject),'utf8'), {contentType:'text/plain', contentEncoding: 'UTF-8'});

Aparentemente, las propiedades contentType y contentEncoding son una convención, utilizada por el consumidor de mensajes Spring Rabbit. Ahora el servicio Java obtiene la cadena JSON correcta.

about 4 years ago · Juan Pablo Isaza
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!