どのように適切にmqttJSとJavaScriptでのActiveMQにJMSメッセージを送信し、それをデコードします

theshadog:

私は経由トピックにメッセージを送ることができますJavaのバックエンドを、持っています

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

私のjavascriptのフロントエンドでは、私は、ActiveMQのに接続して、マッサージを受け取るためにmqttJSを使用します。

    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());
    });

私はバックエンドから受け取るメッセージは、このようなものです:

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

私のメッセージに "Hello World!" ある。しかし、また、読み取り不能にの束は、私はヘッダから推測します。

私は、フロントエンド側のバックエンド側の異なるMessageConvertersと異なるパーサを試してみました。何もない作品。

何が私はちょうど得るために、何をする必要がありますに「Hello World!」を メッセージとして?または要求され、JMSを使用して、そこにメッセージを送信するためのより良い方法です。

theshadog:

更新:

サポートのJMS 2で、ActiveMQのアルテミスに切り替えた後、それはどんな正規表現せずに完全に正常に動作します。

古いポスト:

私は、メッセージの本文をフィルタリングするか、ヘッダーなしでメッセージを送信するために、任意の解決策を見つけることができませんでしたので(関連、未回答の質問はここにある:どのように空のヘッダとプレーンテキストてJMSMessageを送信する)溶液にJSONオブジェクトとフィルタを送信しましたJSONは、正規表現とフロントエンドの構文。

バックエンド:

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 );
}

フロントエンド:

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);
});

結果は次のようになります。

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

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=182344&siteId=1