Я пытаюсь публиковать сообщения в RabbitMQ из скрипта Ruby (используя Bunny) и потреблять их из сервер node.js (используя node-amqp).
Первое сообщение приходит успешно, но затем в node.js регистрируется ошибка, соединение закрывается, и дальнейшие сообщения не принимаются:
mu:charlie-node tom$ node charlie.js
22 Jul 09:11:04 - Running in development environment.
22 Jul 09:11:04 - Connected to AMQP.
22 Jul 09:11:04 - {"build_id":1234}
Unhandled channel error: NOT_FOUND - unknown delivery tag 1
Если я публикую два сообщения в обмен, а затем запускаю сервер node.js, я вижу, что оба они прибывают до регистрации ошибки, что говорит мне о том, что RabbitMQ закрывает обмен или очередь, когда она пуста. Однако, поскольку у меня для autoDelete установлено значение false на обоих из них, этого не должно быть.
Какие-либо предложения?
Мой скрипт node.js выглядит примерно так:
var amqpConnection = amqp.createConnection({ host: config.rabbitmq.host });
amqpConnection.addListener('ready', function() {
sys.log("Connected to AMQP.");
var exchange = amqpConnection.exchange('job_exchange', {
type : 'topic',
passive : false,
durable : true,
autoDelete : false
})
exchange.addListener('open', function() {
var queue = amqpConnection.queue('arthr_queue', {
passive : false,
autoDelete : false,
durable : true,
exclusive : false
});
queue.bind(exchange, '#');
queue.subscribe(function(message) {
sys.log(message.data.toString());
});
});
});
А мой сценарий Ruby выглядит так:
require 'rubygems'
require 'bunny'
require 'json'
b = Bunny.new(:logging => true)
b.start
job_exchange = b.exchange('job_exchange',
:type => :topic,
:durable => true,
:auto_delete => false,
:passive => false
)
message = {
:build_id => 1234
}
job_exchange.publish(message.to_json, :key => 'arthr.rebuild')
b.stop