<div>
            <div><p style="color: #a0a0a0;">On Thursday, March 31, 2011 at 11:00 PM, can xiang wrote:</p><blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px;"><span><div><div>I'm evaluating a messaging system for my web project. I give rabbitmq 2.4.0 and pika 0.9.5 a try, today. It works unbelievably fine. </div></div></span></blockquote><div><br></div><div>Glad to hear it :)</div><div>&nbsp;</div><blockquote type="cite" style="border-left-style:solid;border-width:1px;margin-left:0px;padding-left:10px;"><span><div><div>Below is what I'm doing:<br><br>1. Use pika with tornado 1.0,&nbsp; which uses TornadoConnection adapter<br>
2. only produce message in tornado handler, no consumer in tornado<br>3. use 3 standalone round-robin worker as consumer<br><br>I did a 1million "hello word" test with "ab -n 1000000 -c 10 <a href="http://localhost/helloword">http://localhost/helloword</a>". Message flows at 2000+message/s and 100% message receive, all good except I get the following warning in tornado process:<br>
<i><br>&nbsp;/usr/local/lib/python2.6/dist-packages/pika-0.9.5-py2.6.egg/pika/connection.py:642: UserWarning: Pika: Write buffer exceeded warning threshold at 1271 bytes and an estimated 21 frames behind</i></div></div></span></blockquote><div>Pika attempts to detect TCP Back-pressure by watching your average frame size over a rolling window and then detecting when the output buffer exceeds the average frame size multiplied by a configurable multiplier which is 10 by default.</div><div><br></div><div><a href="http://pika.github.com/connecting.html#tcp-backpressure">http://pika.github.com/connecting.html#tcp-backpressure</a></div><div><br></div><div>What is happening is you're publishing faster than you're consuming (since you're not consuming) and RabbitMQ is throttling you. Pika is raising warnings so you can respond accordingly in your code. &nbsp;If you want to ignore these warnings you can do the following:</div><div><br></div><div>&nbsp;&nbsp; &nbsp;from warnings import simplefilter</div><div>&nbsp;&nbsp; &nbsp;simplefilter("ignore", "user")</div><div><br></div><div>Alternatively you can increase the multiplier to delay when you'll be notified via warning:</div><div><br></div><div>&nbsp;&nbsp; &nbsp;connection.set_backpressure_multiplier(100)&nbsp;</div><div><br></div><div>Where 100 is the value you want the multiplier to be.</div><div><br></div><div>However. if you do this and put too many messages into RabbitMQ without consuming, you will run into problems with RabbitMQ and your messages will not be sent.</div><div><br></div><div>What I would do is warnings.catch_warnings to respond in your application appropriately:</div><div><br></div><div><a href="http://docs.python.org/library/warnings.html#warnings.catch_warnings">http://docs.python.org/library/warnings.html#warnings.catch_warnings</a></div><div><br></div><div>I hope this helps!</div><div><br></div><div>Gavin</div>
            </div>
        </div>