2012-01-06 18 views
3

私はHerokuの2つのプロセスタイプを持っています:RubyのWeb dynoとNode.jsのワーカーです。私はRabbitMQアドオン(現在のベータ版)を使ってRubyからNodeにメッセージを渡しています。ノードは正しく接続され、使用されます。キューは、キューの最初の接続/作成である限り、Rubyは正しく接続してパブリッシュします。 明らかに、私が昨夜テストしたときに私がメッセージを受け取ることができなかった理由を発見したのは、私のRubyの前にNodeプロセスを開始したことでした。RabbitMQ:Rubyの既存のキューに接続して公開する

私はHeroku上にいるので、RubyとNodeの2つ以上のスレッドが並行して動作するようになります。それらのスレッドは、最初にキューを開始して既存のキューに接続することをサポートする必要があります。問題。私の質問に私をもたらします

は、どのように私はすでに接続されている消費者にメッセージを公開し、メッセージの受信を待機する目的で、ルビーを使用して、既存のRabbitMQキューに接続しますか?

答えて

1

既存のキューとのコリジョンがあると、キャロットは自動的に失敗します。

既存のキューに衝突することなく接続するには、キューを初めて作成したときと同じオプションを指定する必要があります。

キャロットはこの場合はサイレントに失敗しますが、それはそれです。

ルビー:

Carrot.server 
q = Carrot.queue('onboarding', {:durable=>true, :autoDelete=>false}) 
q.publish('test') 

のNode.js:

var amqp = require("amqp"); 
var c = amqp.createConnection({ host: 'localhost' }); 

q = c.queue('onboarding', {durable: true, autoDelete:false}); 

// ... wait for queue to connect (1 sec), or use .addListener('ready', callback) ... 

q.subscribe({ack:true}, function(message){ 
    console.log(message.data.toString()) 
    q.shift() 
}) 
+0

使用.addListener( '準備'、コールバック)、あなたは)(q.addListenerを意味していますか? – nfpyfzyf

+0

@nfpyfzyfそれはしばらくしていますが、はい、あなたは正しいと思います。 –

0

は、あなたが他のクライアント(複数可)を試したことがありますか?

http://rubyamqp.info/

+0

はい、私はバニーとニンジンを使用しました。私が正しく使用し始めると、キャロットは働いています。 –

+0

PS。 RabbitMQ:私の質問に答えるためにSOに登録しましたか?それは献身です。 –

+0

ha ...いいえ、悲しい;-) – alexis

関連する問題