Я указал очередь на сервере RabbitMQ под названием MyQueue
. Он прочный и имеет x-dead-letter-exchange
установлен на MyQueue.DLX
.AMQ Gem, определяющий обмен мертвой буквой
(У меня также есть обмен называется MyExchange
привязан к этой очереди, а другой обмен называется MyQueue.DLX
, но я не считаю, что это важно для вопроса)
Если я использую amqp
камень Ruby, чтобы подписаться на те сообщения Я хотел бы сделать это следующим образом:
# Doing this before and in a new thread has to do with how my code is structured
# shown here in case it has a bearing on the question
Thread.new do
AMQP.start('amqp://guest:[email protected]:5672')
end
EventMachine.next_tick do
channel = AMQP::Channel.new(AMQP.connection)
queue = channel.queue("MyQueue", :durable => true, :'x-dead-letter-exchange' => "MyQueue.DLX")
queue.subscribe(:ack => true) do |metadata, payload|
p metadata
p payload
end
end
Если я выполнить этот код с очередями и обменами уже созданными и связанными (так как они должны быть в моем наборе вверх), то RabbitMQ проливает следующее сообщение об ошибке в своих журналах:
=ERROR REPORT==== 19-Aug-2013::14:25:53 ===
connection <0.19654.2>, channel 2 - soft error:
{amqp_error,precondition_failed,
"inequivalent arg 'x-dead-letter-exchange'for queue 'MyQueue' in vhost '/': received none but current is the value 'MyQueue.DLX' of type 'longstr'",
'queue.declare'}
Который, кажется, говорит, что я не указан тот же Dead Letter Обмен как уже существующей очереди - но я считаю, что я с queue = ...
линии.
Любые идеи?
Так успешно ли ваш код работает, если у вас нет заявленных или обменов очередей? –
Если я объявляю свои очереди без обмена мертвой буквой, тогда да, это действительно работает - я думаю, что я просто не знаю, как указать DLX с рубиновым камнем. –