AMQP gem specifying a dead letter exchange
Posted
by
JP.
on Stack Overflow
See other posts from Stack Overflow
or by JP.
Published on 2013-08-19T13:40:41Z
Indexed on
2013/11/10
21:55 UTC
Read the original article
Hit count: 386
I've specified a queue on the RabbitMQ server called MyQueue
. It is durable and has x-dead-letter-exchange
set to MyQueue.DLX
.
(I also have an exchange called MyExchange
bound to that queue, and another exchange called MyQueue.DLX
, but I don't believe this is important to the question)
If I use ruby's amqp
gem to subscribe to those messages I would do it like this:
# 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
If I execute this code with the queues and exchanges already created and bound (as they need to be in my set up) then RabbitMQ throws the following error in its logs:
=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'}
Which seems to be saying that I haven't specified the same Dead Letter Exchange as the pre-existing queue - but I believe I have with the queue = ...
line.
Any ideas?
© Stack Overflow or respective owner