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

Filed under:
|
|

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

Related posts about ruby

Related posts about rabbitmq