<font face="arial" size="2"><p style="margin:0;padding:0;">Surely if I have a 1-second delay after I send the ACK, it will have arrived at the server. What would stop it?</p>
<p style="margin:0;padding:0;">&nbsp;</p>
<p style="margin:0;padding:0;">All the same, I think I'll fire up Wireshark and see what's happening.</p>
<p style="margin:0;padding:0;">&nbsp;</p>
<p style="margin:0;padding:0;">-larry</p>
<p style="margin:0;padding:0;">&nbsp;</p>
<p style="margin:0;padding:0;">-----Original Message-----<br />From: "Simon MacMullen" &lt;simon@rabbitmq.com&gt;<br />Sent: Wednesday, November 7, 2012 4:50am<br />To: "Discussions about RabbitMQ" &lt;rabbitmq-discuss@lists.rabbitmq.com&gt;<br />Cc: larry.edelstein@therealreal.com<br />Subject: Re: [rabbitmq-discuss] redelivery after ACK<br /><br /></p>
<div id="SafeStyles1352402445">
<p style="margin:0;padding:0;">Hmm.<br /><br />Acks only matter to the server if it receives them. I wonder if you are <br />killing the script after it has sent acks, but before the server has <br />received them. That's consistent with what you're seeing re some acks <br />getting through when you ack a lot - those are the ones that made it all <br />the way to the server before the client was killed.<br /><br />You may also be running into the Nagle algorithm. Not sure how you would <br />disable that for the Ruby gem. Is the author here?<br /><br />Cheers, Simon<br /><br />On 07/11/12 03:48, larry.edelstein@therealreal.com wrote:<br />&gt; Hi folks - I'm new to RabbitMQ. I've got a problem and need some help.<br />&gt;<br />&gt; I've posted the question on Stack Overflow at<br />&gt; http://stackoverflow.com/questions/13262738/redelivery-after-ack, so if<br />&gt; you want to answer it there, please do! I'll do my best to repost, here,<br />&gt; any answers I get there, so that rabbitmq-discuss list denizens can also<br />&gt; see and discuss.<br />&gt;<br />&gt; So feel free to go to Stack Overflow, or read it here.<br />&gt;<br />&gt;<br />&gt; Larry Edelstein<br />&gt;<br />&gt; Now Answers, Inc.<br />&gt;<br />&gt; m (415) 713-9148<br />&gt;<br />&gt; ribs@acm.org<br />&gt;<br />&gt;<br />&gt; +++<br />&gt;<br />&gt; Why are my RabbitMQ messages being redelivered to my consumer after they<br />&gt; have been ACKd? I'm new to RabbitMQ; I must be misusing it, or there's<br />&gt; something wrong perhaps with the Ruby amqp gem.<br />&gt;<br />&gt;<br />&gt; I have a ruby script that subscribes to a queue and acks each message.<br />&gt; If I let it make it all the way through the messages, the messages<br />&gt; really do disappear from the queue; they're not redelivered. But if I<br />&gt; interrupt my script before they're all ACKd, and then start the script<br />&gt; again, delivery starts anew from the first message.<br />&gt;<br />&gt;<br />&gt; The behavior I'm seeing in code is reflected accurately by the RabbitMQ<br />&gt; web management interface; the queue has messages, and despite the ACKs,<br />&gt; they don't disappear.<br />&gt;<br />&gt;<br />&gt; Clue: I put about 5000 messages in the queue. If I let the consumer ACK<br />&gt; a significant amount, a few messages do actually appear to be removed<br />&gt; from the queue (contrary to what I said above). I haven't been able to<br />&gt; nail this phenomenon down.<br />&gt;<br />&gt;<br />&gt; I'm using ruby 1.9.3, RabbitMQ 2.8.7, and the amqp ruby gem 0.9.8. It<br />&gt; happens with producer and consumer on Ubuntu 12.0.4, or on Mac OS 10.7.4.<br />&gt;<br />&gt;<br />&gt; What the heck??<br />&gt;<br />&gt;<br />&gt; Here's the code for the consumer:<br />&gt;<br />&gt;<br />&gt; # encoding: utf-8<br />&gt;<br />&gt; require "rubygems"<br />&gt;<br />&gt; require 'amqp'<br />&gt;<br />&gt; require 'aws-sdk'<br />&gt;<br />&gt; queue_name = "some.queue"<br />&gt;<br />&gt; begin<br />&gt;<br />&gt; AMQP.start("amqp://localhost:5672") do | connection |<br />&gt;<br />&gt; channel  = AMQP::Channel.new(connection)<br />&gt;<br />&gt; queue = channel.queue(queue_name, :durable =&gt; true)<br />&gt;<br />&gt; queue.subscribe(:ack =&gt; true) do | metadata, payload |<br />&gt;<br />&gt; metadata.ack<br />&gt;<br />&gt; end<br />&gt;<br />&gt; end<br />&gt;<br />&gt; end<br />&gt;<br />&gt;<br />&gt; and here's the producer:<br />&gt;<br />&gt;<br />&gt; # encoding: utf-8<br />&gt;<br />&gt; require "rubygems"<br />&gt;<br />&gt; require 'amqp'<br />&gt;<br />&gt; require 'aws-sdk'<br />&gt;<br />&gt; msg = ARGV[0]<br />&gt;<br />&gt; queue_name = "some.queue"<br />&gt;<br />&gt; begin<br />&gt;<br />&gt; AMQP.start("amqp://localhost:5672") do | connection |<br />&gt;<br />&gt; channel  = AMQP::Channel.new(connection)<br />&gt;<br />&gt; queue    = channel.queue(queue_name, :durable =&gt; true)<br />&gt;<br />&gt; (1..5000).each do | x |<br />&gt;<br />&gt; channel.default_exchange.publish x, :routing_key =&gt; queue_name,<br />&gt; :persistent =&gt; true<br />&gt;<br />&gt; end<br />&gt;<br />&gt; end<br />&gt;<br />&gt; end<br />&gt;<br />&gt;<br />&gt;<br />&gt;<br />&gt; _______________________________________________<br />&gt; rabbitmq-discuss mailing list<br />&gt; rabbitmq-discuss@lists.rabbitmq.com<br />&gt; https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss<br />&gt;<br /><br /><br />-- <br />Simon MacMullen<br />RabbitMQ, VMware</p>
</div></font>