繁体   English   中英

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

[英]RabbitMQ: Connecting & publishing to an existing queue in Ruby

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

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

因为我在Heroku上,所以我将要有多个Ruby和Node线程并发工作,并且每个线程都需要支持成为第一个启动队列并连接到现有队列的问题。

这让我想到了我的问题:

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

如果与现有队列发生冲突,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()
})

你试过其他客户吗?

http://rubyamqp.info/

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM