<div dir="ltr">Thanks again for the quick response.<div><br></div><div>I also read <a href="http://www.rabbitmq.com/extensions.html#publishing">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><br><div class="gmail_quote">On Mon, Nov 28, 2011 at 1:26 PM, Marek Majkowski <span dir="ltr">&lt;<a href="mailto:majek04@gmail.com">majek04@gmail.com</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><div class="im">On Mon, Nov 28, 2011 at 11:11, Roey Berman &lt;<a href="mailto:roey.berman@gmail.com">roey.berman@gmail.com</a>&gt; wrote:<br>

&gt; Oh one fix:<br>
&gt; self.chan.basic_publish(message, **kwargs) -&gt; 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">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&#39;t handle the &quot;multiple&quot; flag and NAcks from the server.<br>
&gt;&gt; I know my code handles the &quot;multiple&quot; flag, but don&#39;t know about NAcks.<br>
&gt;&gt; I don&#39;t really know how to test for nacks since I&#39;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>
&quot;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&#39;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&#39;d once. No guarantees are made as<br>
to how soon a message is confirmed. No message will be both confirmed<br>
and nack&#39;d.&quot;<br>
<br>
That&#39;s all I know.<br>
<div class="im"><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 class="HOEnZb"><font color="#888888"><br>
Marek<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
<br>
&gt;&gt; On Mon, Nov 28, 2011 at 1:01 PM, Marek Majkowski &lt;<a href="mailto:majek04@gmail.com">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&#39;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;  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">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&#39;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;    def __init__(self, channel):<br>
&gt;&gt;&gt; &gt;        self.delivery_tag = 1<br>
&gt;&gt;&gt; &gt;        self.acked        = 0<br>
&gt;&gt;&gt; &gt;        self._callbacks   = {}<br>
&gt;&gt;&gt; &gt;        self.chan = channel<br>
&gt;&gt;&gt; &gt;        self.chan.confirm_delivery(self.on_delivered)<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;    def publish(self, message, callback, **kwargs):<br>
&gt;&gt;&gt; &gt;        self._callbacks[self.delivery_tag] = callback<br>
&gt;&gt;&gt; &gt;        self.delivery_tag += 1<br>
&gt;&gt;&gt; &gt;        self.chan.basic_publish(message, **kwargs)<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;    def on_delivered(self, frame):<br>
&gt;&gt;&gt; &gt;        success = isinstance(frame.method, pika.spec.Basic.Ack)<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;        if frame.method.multiple:<br>
&gt;&gt;&gt; &gt;            for dtag in range(self.acked+1, frame.method.delivery_tag<br>
&gt;&gt;&gt; &gt; +1):<br>
&gt;&gt;&gt; &gt;                self._callbacks.pop(dtag)(success)<br>
&gt;&gt;&gt; &gt;            self.acked = frame.method.delivery_tag<br>
&gt;&gt;&gt; &gt;        else:<br>
&gt;&gt;&gt; &gt;            self._callbacks.pop(frame.method.delivery_tag)(success)<br>
&gt;&gt;&gt; &gt;            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">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></blockquote></div><br></div></div>