という名前の RabbitMQ サーバー上のキューを指定しましたMyQueue
。それは耐久性があり、にx-dead-letter-exchange
設定されていMyQueue.DLX
ます。
(私はまた、MyExchange
そのキューにバインドされた と呼ばれる交換と と呼ばれる別の交換MyQueue.DLX
を持っていますが、これが質問にとって重要であるとは思いません)
amqp
これらのメッセージをサブスクライブするためにruby の gem を使用する場合、次のようにします。
# 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:guest@127.0.0.1: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 Exchange を指定していないqueue = ...
ことを示しているようですが、この行には指定したと思います。
何か案は?