Good day,<div><br></div><div>While writing some code using the Ruby AMQP gem against RabbitMQ, I&#39;ve noticed that if I publish a message and quickly close the connection, even though I&#39;ve received a publish-ok response from the server, the message fails to be queued by the broker.</div>
<div><br></div><div>The code in question looks like:</div><div><br></div><div><div>require &#39;amqp&#39;</div><div>EM.run do</div><div>  client   = AMQP.connect(:host =&gt; &#39;127.0.0.1&#39;)</div><div>  channel  = AMQP::Channel.new(client)</div>
<div>  channel.on_error { puts &#39;channel error&#39;; EM.stop }</div><div>  exchange = channel.topic &#39;foo&#39;,:durable =&gt; true</div><div>  exchange.publish( &#39;hello world&#39;, :routing_key =&gt; &quot;some_topic&quot;, :persistent =&gt; true, :nowait =&gt; false ) { puts &#39;publish-ok&#39;; EM.stop }</div>
<div>end</div><div><br></div><div>I should clarify that there is a binding in place to route messages with routing_key &quot;some_topic&quot; to the a queue on the &quot;foo&quot; exchange.</div><div><br></div><div>If I remove the EM.stop call in the publish-ok callback, allowing the connection to exist after the publish, then I the message is queued.</div>
<div><br></div><div>Is this expected behavior?</div><div><br></div><div>I would expect that if the broker has responded with a publish-ok, then regardless of what happens to the connection from that point forward, it will do its best to deliver that message to a queue.</div>
<br>-- <br><b>Elias Levy</b><div>Fellow, Technical Research Group</div><div>SourceFire</div><div><br></div><br>
</div>