¿Cómo enviar un mensaje JMS a activemq y decodificarlo en javascript con mqttJS adecuadamente

theshadog:

Tengo un motor de Java, donde puedo enviar mensajes a través de los temas

jmsTemplate.convertAndSend("topic", "Hello World!");

En mi Javascript frontend utilizo mqttJS para conectarse a activemq y recibir el masaje:

    let mqtt = require('mqtt')
    let options ={
        clientId:"test",
        username:"username",
        useSSL: true,
        password:"password",
        clean:true};
    let client  = mqtt.connect(
        'wss://someUrl.com:61619',
        options);

    client.on('connect', function () {
        client.subscribe('myTopic', function (err) {
            if (!err) {
                console.log("successfully connected to myTopic'");
            }
        })
    });

    client.on('message', function (topic, message) {
        console.log(message.toString());
    });

El Recieve mensaje que desde el backend es algo como esto:

S�A S�)�x-opt-jms-destQ�x-opt-jms-msg-typeQ Ss�   f    
�/ID:myID@�topic://myTopic@@@@�  j��< St�
e Sw�  Hello World!

Mi mensaje "Hello World!" esta ahí. Pero también un montón de en ilegible, me imagino de la cabecera.

Probé diferentes MessageConverters en el lado de fondo y diferentes programas de análisis en el lado frontend. Nada funciona.

¿Qué necesito hacer, para obtener sólo "Hello World!" como el mensaje? ¿O hay una mejor manera de enviar el mensaje, utilizando JMS, que se requiere.

theshadog:

Actualizar:

Después de cambiar a ActiveMQ Artemis, con soportes JMS 2, funciona perfectamente bien sin ningún tipo de expresiones regulares.

Mensaje viejo:

Dado que no he encontrado ninguna solución para filtrar el cuerpo del mensaje o para enviar el mensaje sin una cabecera (relacionado, pregunta sin respuesta es aquí: ¿Cómo enviar JMSMessage texto plano con cabecera vacío ), la solución fue enviar un objeto JSON y filtro en JSON la sintaxis en la interfaz con una expresión regular.

backend:

private void sendHelloWorld() {
    Map<String, String> subPayload = new HashMap<>();
    subPayload.put("test1", "value2");
    subPayload.put("test2", "value3");
    Map<String, Object> payload = new HashMap<>();
    payload.put("message", "Hello World!");
    payload.put("context", "Something");
    payload.put("map", subPayload);
    jmsTemplate.setMessageConverter(new MappingJackson2MessageConverter());
    jmsTemplate.convertAndSend( "notification/prediction", payload );
}

Interfaz:

client.on('message', function (topic, message, packet) {
    const regex = /\{(.*)\}$/g;
    const match = message.toString().match(regex);
    if(null === match) {
        console.error("Could not parse message");
        console.log('message', message.toString());
    }
    const json = JSON.parse(match[0]);
    console.log('message', json);
});

El resultado sería:

{
  "message":"Hello World!", 
  "context":"Something",
  "map": {
     "test1":"value2",
     "test2":"value3"
   }
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=182353&siteId=1
Recomendado
Clasificación