3

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

显然,当您尝试创建一个已经存在的队列时,Carrot 会抛出一些有趣的错误,这就是我发现无法传达我的消息的原因(我本可以在昨晚测试时发誓它有效)是我在我的 Ruby 之前开始了我的 Node 进程。

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

这让我想到了我的问题:

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

4

2 回答 2

1

如果与现有队列发生冲突,Carrot 将静默失败。

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

在这种情况下,Carrot 默默地失败了,这很糟糕,但事实就是如此。

红宝石:

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

节点.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 回答