2012-01-26 17 views
1

を実行していない場合、これは、受信機がしかし、もしメッセージがNode.jsのRabbitMQのメッセージは、受信機が

2に配信されたメッセージを送信後、最初に開始され1.If、私は

を持っています問題であり、失われました受信者が開始されていない場合、コードはメッセージの送信を指示しますが、受信者の開始はメッセージを取得しません。

私がPythonでpikaを使って同じシーケンスを試しても、正常に動作するようです。

は、私はまた、rabbitmqctlの--list_queues私はNode.jsの0.70を実行しているとUbuntu 11.04 64ビット版上で実行しています

をコマンドを使用して何もメッセージがないことを確認し

私は、次のコードを持っている私send.js

var util= require('util') 
    var amqp = require('amqp'); 

    var connection = amqp.createConnection({host:'localhost', 
            login:'guest', 
            password:'guest'}); 
    var pubMessage = function pubM(msg) { 
    var x = connection.exchange(); 
    var q = connection.queue('helloNode', 
      { autoDelete: true, durable: false, exclusive: false } 
    ); 
    x.publish('helloNode',{helloNode: "This is a message"}); 
    }; 

    connection.addListener('ready', pubMessage); 
    console.log(" Sent a message "); 

と私の受信機に次のコード

var util= require('util') 
    var amqp = require('amqp'); 
    var connection = amqp.createConnection({host:'localhost', 
            login:'guest', 
            password:'guest'}); 

    connection.on('ready', function() { 
    var q = connection.queue('helloNode', 
      { autoDelete: true, durable: false, exclusive: false } 
    ); 
    q.bind('#'); 

    q.subscribe(function (message) { 
      util.p(message); 
    }); 
    }); 

答えて

1

キューのバインドがautoDelete:trueで設定されています。このセットでは、受信者が接続されていない(または切断された)場合、メッセージをルーティングするキューはありません。 autoDelete:falseを設定すると、受信者がオフラインになってもキューがそのまま残り、メッセージが引き続き発生します。

+0

autoDeleteを設定します。falseが処理されました。唯一のことは、同じキュー名を使用していたので、変更を加えた後にrabbitmqサーバーを再起動しなければならないということでした。実際に私はラップトップで走っていて、ラップトップは再起動しました –

0

メッセージは「helloNode」キューにルーティングされ、送信者が終了するとこのキューは削除されます。送信者に作成されたこのキューへのサブスクリプションがあるため、これは "exclusive:false"の場合でも適用されます。このことを考えると、「サブスクリプションがキューでアクティブでない場合、自動削除されません」という動作はここでは適用されません。

多分、pikaは異なる値の交換/キューを作成しますか?

関連する問題