<div>
                    I am not using it in production yet, but we do have all of those features in github Master, 0.9.6p0. I am in process of writing tests and cleaning up 0.9.6 for release.</div><div><br></div><div>Test it and see if it works for you. I'd not be concerned about production use if you do not run into any issues.</div><div><br></div><div>Gavin</div>
                <div></div>
                 
                <p style="color: #A0A0A8;">On Tuesday, November 29, 2011 at 8:55 AM, Roey Berman wrote:</p>
                <blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px;">
                    <span><div><div><div dir="ltr"><div>I've created a pull request which fixes the demo: <a href="https://github.com/pika/pika/pull/109">https://github.com/pika/pika/pull/109</a></div><div><br></div><div>Note:</div><div>The stable pika release (0.9.5) doesn't add the Basic.Nack and Confirm.SelectOk callbacks when you call channel.confirm_delivery()</div>
<div><div>you'll explicitly have to call channel.add_callback(on_delivered, ['Basic.Nack', 'Confirm.SelectOk'])</div></div><div><br></div><div>Would you recommend using the git master version of pika or 0.9.5 for a production environment?</div>
<br><div>On Mon, Nov 28, 2011 at 1:53 PM, Roey Berman <span dir="ltr">&lt;<a href="mailto:roey.berman@gmail.com">roey.berman@gmail.com</a>&gt;</span> wrote:<br><blockquote type="cite"><div>
<div dir="ltr">Thanks again for the quick response.<div><br></div><div>I also read&nbsp;<a href="http://www.rabbitmq.com/extensions.html#publishing" target="_blank">http://www.rabbitmq.com/extensions.html#publishing</a> before posting this question.</div>

<div><br></div><div>But again my problem is with simulating server nacks so i can create a test case for my code.</div><div><br></div><div>Do you have any idea how I can do that?</div><div><div><div><br><div>
On Mon, Nov 28, 2011 at 1:26 PM, Marek Majkowski <span dir="ltr">&lt;<a href="mailto:majek04@gmail.com" target="_blank">majek04@gmail.com</a>&gt;</span> wrote:<br><blockquote type="cite"><div><div>On Mon, Nov 28, 2011 at 11:11, Roey Berman &lt;<a href="mailto:roey.berman@gmail.com" target="_blank">roey.berman@gmail.com</a>&gt; wrote:<br>


&gt; Oh one fix:<br>
&gt; self.chan.basic_publish(message, **kwargs) -&gt;&nbsp;self.chan.basic_publish(body =<br>
&gt; message, **kwargs)<br>
&gt;<br>
&gt; On Mon, Nov 28, 2011 at 1:08 PM, Roey Berman &lt;<a href="mailto:roey.berman@gmail.com" target="_blank">roey.berman@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Thanks for the quick reply.<br>
&gt;&gt; At first I used the code from the example you referred me to but it<br>
&gt;&gt; doesn't handle the "multiple" flag and NAcks from the server.<br>
&gt;&gt; I know my code handles the "multiple" flag, but don't know about NAcks.<br>
&gt;&gt; I don't really know how to test for nacks since I've never gotten them<br>
&gt;&gt; from rabbitmq server.<br>
<br>
</div><a href="http://www.rabbitmq.com/extensions.html#publishing" target="_blank">http://www.rabbitmq.com/extensions.html#publishing</a><br>
<br>
"In exceptional cases when the broker is unable to handle messages<br>
successfully, instead of a basic.ack, the broker will send a<br>
basic.nack. In this context, fields of the basic.nack have the same<br>
meaning as the corresponding ones in basic.ack and the requeue field<br>
should be ignored. By nack'ing one or more messages, the broker<br>
indicates that it was unable to process the messages and refuses<br>
responsibility for them; at that point, the client may choose to<br>
re-publish the messages.<br>
<br>
After a channel is put into confirm mode, all subsequently published<br>
messages will be confirmed or nack'd once. No guarantees are made as<br>
to how soon a message is confirmed. No message will be both confirmed<br>
and nack'd."<br>
<br>
That's all I know.<br>
<div><br>
<br>
&gt;&gt; Once I know my code handles all responses correctly I will create a pull<br>
&gt;&gt; request for the pika example code.<br>
<br>
</div>Good!<br>
<span><font color="#888888"><br>
Marek<br>
</font></span><div><div><br>
<br>
&gt;&gt; On Mon, Nov 28, 2011 at 1:01 PM, Marek Majkowski &lt;<a href="mailto:majek04@gmail.com" target="_blank">majek04@gmail.com</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Hi,<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; I'm not sure if it works - but the pika example showing<br>
&gt;&gt;&gt; publisher confirms usage looks rather similar:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; <a href="https://github.com/pika/pika/blob/120fdea5913e7ed80536ff55634ab0f8f4554e79/examples/demo_send_confirmed.py" target="_blank">https://github.com/pika/pika/blob/120fdea5913e7ed80536ff55634ab0f8f4554e79/examples/demo_send_confirmed.py</a><br>


&gt;&gt;&gt;<br>
&gt;&gt;&gt; Cheer,<br>
&gt;&gt;&gt; &nbsp;Marek<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On Sun, Nov 27, 2011 at 15:20, bergundy &lt;<a href="mailto:roey.berman@gmail.com" target="_blank">roey.berman@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt; &gt; Hi everyone,<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; I couldn't find code for implementing publisher confirmations.<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; I wrote this piece of code using pika 0.9.5 (python client).<br>
&gt;&gt;&gt; &gt; Would like to get feedback on this, I hope I got it right ...<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; ---<br>
&gt;&gt;&gt; &gt; class ConfirmingProducer(object):<br>
&gt;&gt;&gt; &gt; &nbsp; &nbsp;def __init__(self, channel):<br>
&gt;&gt;&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp;self.delivery_tag = 1<br>
&gt;&gt;&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp;self.acked &nbsp; &nbsp; &nbsp; &nbsp;= 0<br>
&gt;&gt;&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp;self._callbacks &nbsp; = {}<br>
&gt;&gt;&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp;self.chan = channel<br>
&gt;&gt;&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp;self.chan.confirm_delivery(self.on_delivered)<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; &nbsp; &nbsp;def publish(self, message, callback, **kwargs):<br>
&gt;&gt;&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp;self._callbacks[self.delivery_tag] = callback<br>
&gt;&gt;&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp;self.delivery_tag += 1<br>
&gt;&gt;&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp;self.chan.basic_publish(message, **kwargs)<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; &nbsp; &nbsp;def on_delivered(self, frame):<br>
&gt;&gt;&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp;success = isinstance(frame.method, pika.spec.Basic.Ack)<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp;if frame.method.multiple:<br>
&gt;&gt;&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;for dtag in range(self.acked+1, frame.method.delivery_tag<br>
&gt;&gt;&gt; &gt; +1):<br>
&gt;&gt;&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;self._callbacks.pop(dtag)(success)<br>
&gt;&gt;&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;self.acked = frame.method.delivery_tag<br>
&gt;&gt;&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp;else:<br>
&gt;&gt;&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;self._callbacks.pop(frame.method.delivery_tag)(success)<br>
&gt;&gt;&gt; &gt; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;self.acked += 1<br>
&gt;&gt;&gt; &gt; _______________________________________________<br>
&gt;&gt;&gt; &gt; rabbitmq-discuss mailing list<br>
&gt;&gt;&gt; &gt; <a href="mailto:rabbitmq-discuss@lists.rabbitmq.com" target="_blank">rabbitmq-discuss@lists.rabbitmq.com</a><br>
&gt;&gt;&gt; &gt; <a href="https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss" target="_blank">https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss</a><br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;<br>
&gt;<br>
&gt;<br>
</div></div></div></blockquote></div><br></div></div></div></div>
</div></blockquote></div><br></div>
</div><div><div>_______________________________________________</div><div>rabbitmq-discuss mailing list</div><div><a href="mailto:rabbitmq-discuss@lists.rabbitmq.com">rabbitmq-discuss@lists.rabbitmq.com</a></div><div><a href="https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss">https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss</a></div></div></div></span>
                 
                 
                 
                 
                </blockquote>
                 
                <div>
                    <br>
                </div>