3

Heroku には 2 つのプロセス タイプがあります。Ruby の Web dyno と Node.js のワーカーです。Ruby から Node.js にメッセージを渡すために、RabbitMQ アドオン (現在はベータ版) を使用しています。Node は正しく接続して消費し、Ruby はキューを最初に接続/作成する限り、正しく接続して発行します

どうやら、既に存在するキューを作成しようとすると、Carrot はいくつかの面白いエラーをスローするようです。これが、メッセージを送信できない理由 (昨夜テストしたときに機能していた可能性があること) を発見した方法です。 Ruby の前に Node プロセスを開始しました。

私は Heroku を使用しているので、Ruby と Node の各スレッドを複数同時に動作させることになり、それぞれが最初にキューを開始して既存のキューに接続することを問題なくサポートする必要があります。

それは私の質問に私をもたらします:

Ruby を使用して既存の RabbitMQ キューに接続し、既に接続されてメッセージの受信を待機しているコンシューマーにメッセージを発行するにはどうすればよいですか?

4

2 に答える 2

1

既存のキューとの衝突がある場合、Carrot は黙って失敗します。

競合せずに既存のキューに接続するには、最初にキューを作成したときに使用したものと同じオプションを指定する必要があります。

この場合、キャロットが黙って失敗するのは残念ですが、それはそれです。

ルビー:

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()
})
于 2012-01-06T07:10:11.747 に答える
0

他のクライアントを試しましたか?

http://rubyamqp.info/

于 2012-01-07T06:41:45.670 に答える