RabbitMQ: подключение и публикация к существующей очереди в Ruby - PullRequest
3 голосов
/ 06 января 2012

У меня есть два типа процессов в Heroku: веб-динамо в Ruby и рабочий в Node.js. Я использую аддон RabbitMQ (в настоящее время бета) для передачи сообщения от Ruby к Node. Узел подключается и потребляет правильно, а Ruby подключается и правильно публикует, если он первый подключается / создает очередь .

Видимо, Морковь выдает несколько забавных ошибок, когда вы пытаетесь создать очередь, которая уже существует , и именно поэтому я обнаружил, что причина неспособности передать мое сообщение (я мог поклясться работал, когда я тестировал прошлой ночью) было то, что я начал свой процесс Node перед моим Ruby.

Поскольку я работаю в Heroku, у меня будет более одного из всех потоков Ruby и Node, работающих одновременно, и каждый из них должен поддерживать, чтобы он первым запускал очередь и без проблем подключался к существующей. ,

Что подводит меня к моему вопросу:

Как подключиться к существующей очереди RabbitMQ, используя Ruby, для публикации сообщений для пользователей, которые уже подключены и ожидают получения сообщений?

Ответы [ 2 ]

1 голос
/ 06 января 2012

Морковь молча провалится, если произойдет столкновение с существующей очередью.

Чтобы подключиться к существующей очереди без коллизий, необходимо указать те же параметры, которые использовались при первом создании очереди.

Это отстой, что в этом случае молча терпит неудачу, но это так.

Ruby:

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 голосов
/ 07 января 2012

Вы пробовали другой клиент (ы)?

http://rubyamqp.info/

...