2017-03-24 14 views
0

MQTTを学習し、MQTTをRabbitMQと理解している問題に直面しています(http://blog.airasoul.io/the-internet-of-things-with-rabbitmq-node-js-mqtt-and-amqp/)。公開後にメッセージが受信されません。 RABBITMQ MQTT

パブリッシャーコードを実行すると、キューにmqtt-subscription-test-qos1が追加されますが、メッセージがそのキューに追加されないときに問題が発生します。私はこのキューにamq.topicのバインドを追加しましたが、キーバインディング 'presence'を使用しました。

これは私の出版社コード

var payload = { 
    message : 'Hello' 
}; 

var client = mqtt.connect(url, { clientId: 'test-', clean:true}); 

client.on('connect', function() { 

    client.publish('presence', JSON.stringify(payload), { qos: 1 }, function() { 
    console.log("Sent"); 
    client.end(); 
    process.exit(); 
    }); 
}); 

で、以下の私の加入者コードです。

var client = mqtt.connect(url, { clientId: 'test-', clean:true}); 

client.on('connect', function() { 
    client.subscribe('presence', { qos: 1 }); 
}); 

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

これは、パブリッシャーコードでconnect関数を使用してオプションを宣言していないときに機能します。だから私が得意ではないのは、パブリッシャーがキューを作成してトピックに公開することではないということですか?

私は間違っていますか?

+0

publishコールバックから 'client.end'と' process.exit'コールを削除するとうまくいくのですか? – hardillb

答えて

0

トピックに公開する前にキューを作成する必要はありません。最初のMQTTメッセージを公開すると、デフォルトの交換名 "amq.topic"とトピック名と同じバインディング・キーでキューが自動的に作成されます。

パブリッシャーがメッセージを公開した後で、サブスクライバーが開始してトピックを購読してから公開されたメッセージを受信して​​いないと思われます。まずサブスクライバを起動し、パブリッシャを起動してみてください。

関連する問題