<font face="arial" size="2"><p style="margin:0;padding:0;">&nbsp;</p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;">Hi folks - I'm new to RabbitMQ. I've got a problem and need some help.</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> </span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;">I've posted the question on Stack Overflow at http://stackoverflow.com/questions/13262738/redelivery-after-ack, so if you want to answer it there, please do! I'll do my best to repost, here, any answers I get there, so that rabbitmq-discuss list denizens can also see and discuss.</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> </span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;">So feel free to go to Stack Overflow, or read it here.</span></p>
<p style="margin:0;padding:0;"><br /><span style="font-size: 10pt;">Larry Edelstein</span></p>
<p style="margin:0;padding:0;"><span style="font-size: 10pt;">Now Answers, Inc.</span></p>
<p style="margin:0;padding:0;"><span style="font-size: 10pt;">m (415) 713-9148</span></p>
<p style="margin:0;padding:0;"><span style="font-size: 10pt;">ribs@acm.org</span></p>
<p style="margin:0;padding:0;"><br />+++</p>
<p style="margin:0;padding:0;">&nbsp;</p>
<p style="margin:0;padding:0;">
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;">Why are my RabbitMQ messages being redelivered to my consumer after they have been ACKd? I'm new to RabbitMQ; I must be misusing it, or there's something wrong perhaps with the Ruby amqp gem.</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"><br /></span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;">I have a ruby script that subscribes to a queue and acks each message. If I let it make it all the way through the messages, the messages really do disappear from the queue; they're not redelivered. But if I interrupt my script before they're all ACKd, and then start the script again, delivery starts anew from the first message. </span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"><br /></span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;">The behavior I'm seeing in code is reflected accurately by the RabbitMQ web management interface; the queue has messages, and despite the ACKs, they don't disappear.</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"><br /></span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;">Clue: I put about 5000 messages in the queue. If I let the consumer ACK a significant amount, a few messages do actually appear to be removed from the queue (contrary to what I said above). I haven't been able to nail this phenomenon down.</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"><br /></span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;">I'm using ruby 1.9.3, RabbitMQ 2.8.7, and the amqp ruby gem 0.9.8. It happens with producer and consumer on Ubuntu 12.0.4, or on Mac OS 10.7.4.</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"><br /></span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;">What the heck??</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"><br /></span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;">Here's the code for the consumer:</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"><br /></span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> # encoding: utf-8</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> require "rubygems"</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> require 'amqp'</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> require 'aws-sdk'</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> </span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> queue_name = "some.queue"</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> begin</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> AMQP.start("amqp://localhost:5672") do | connection |</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> channel &nbsp;= AMQP::Channel.new(connection)</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> queue = channel.queue(queue_name, :durable =&gt; true)</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> queue.subscribe(:ack =&gt; true) do | metadata, payload |</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> metadata.ack</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> end</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> end</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> end</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"><br /></span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;">and here's the producer:</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"><br /></span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> # encoding: utf-8</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> require "rubygems"</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> require 'amqp'</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> require 'aws-sdk'</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> </span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> msg = ARGV[0]</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> queue_name = "some.queue"</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> begin</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> AMQP.start("amqp://localhost:5672") do | connection |</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> channel &nbsp;= AMQP::Channel.new(connection)</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> queue &nbsp; &nbsp;= channel.queue(queue_name, :durable =&gt; true)</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> (1..5000).each do | x |</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> channel.default_exchange.publish x, :routing_key =&gt; queue_name, :persistent =&gt; true</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> end</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> end</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"> end</span></p>
<p style="margin:0;padding:0;"><span style="font-family: arial; font-size: 10pt;"><br /></span></p>
<p style="margin:0;padding:0;">&nbsp;</p>
</p>
<p style="margin:0;padding:0;">&nbsp;</p>
<p style="margin:0;padding:0;">&nbsp;</p></font>