RabbitMQ:连接&发布到Ruby中的现有队列

时间:2012-01-06 06:47:37

标签: ruby heroku rabbitmq amqp carrot

我在Heroku上有两种进程类型:Ruby中的web dyno和Node.js中的worker。我正在使用RabbitMQ插件(目前是测试版)将消息从Ruby传递给Node。节点正确连接和使用,只要它是第一个连接/创建队列, Ruby就可以正确连接和发布。

显然,Carrot throws some funny errors when you try to create a queue that already exists,这就是我发现无法传达信息的原因(我可以在昨晚测试时发誓它起作用)是我在开始之前启动了我的节点过程红宝石。

由于我在Heroku上,我将会有多个Ruby和Node线程同时工作,并且每个线程都需要支持成为第一个启动队列并连接到现有队列的问题,而没有问题。

这让我想到了我的问题:

如何使用Ruby连接到现有RabbitMQ队列,以便向已连接并等待接收消息的消费者发布消息?

2 个答案:

答案 0 :(得分:1)

如果与现有队列发生冲突,Carrot将无声地失败。

要连接到现有队列而不发生冲突,您必须指定首次创建队列时使用的相同选项。

在这种情况下,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()
})

答案 1 :(得分:0)

您是否尝试过其他客户?

http://rubyamqp.info/