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"
}
}