Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

266
Vistas
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
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda