Back in July I announced [1] that Bunny needs a serious revamp to stay<div>relevant. The effort did get off the ground but then in August I got</div><div>busy with other things and there were no updates till early November.</div>

<div><br></div><div>Now I am actively working on Bunny again and decided it&#39;s time to</div><div>share what&#39;s going on with the community.</div><div><br></div><div>All the work is going on in the same repository on a branch [2]. Some</div>

<div>of the goals are:</div><div><br></div><div>* Preserve the reason why people use Bunny: it is dead easy to use,  has no dependencies and about as easy to get started as it gets</div><div>* Make it feature complete, on par with amqp gem</div>

<div>* Make it support RabbitMQ extensions and new 3.0 features</div><div>* Give it a good test suite, add it to ACITS [3]</div><div>* Port documentation from <a href="http://rubyamqp.info">http://rubyamqp.info</a> (I am not fond of recommending undocumented libraries)<br>

</div><div><br></div><div>Some minor goals:</div><div><br></div><div><div> * Make network activity happen in a separate thread (or even more than one) to avoid the biggest amqp gem issue: user code blocking the event loop</div>

<div> * Get rid of some bad decisions that make adding new features to the current version nearly impossible.</div></div><div>* Make it suitable for developing sane consumer apps (right now Bunny is primarily used for publishing from Web apps)<br>

</div><div> * Share some code with amqp gem</div><div> * Add RabbitMQ HTTP API support</div><div><br></div><div>As you can image, it won&#39;t be a completely 100% backwards-compatible release but most apps won&#39;t require serious modifications</div>

<div>and when I change things, it is to do &quot;the right thing&quot; over keeping</div><div>bad ideas around forever.</div><div><br></div><div>What already works:</div><div><br></div><div> * Core networking and concurrency parts. This is very similar in design to how RabbitMQ Java client works under the hood.</div>

<div> * Connection, authentication</div><div> * channel.* operations</div><div> * queue.* operations</div><div> * exchange.* operations</div><div> * basic.publish, basic.get, basic.qos</div><div> * New &quot;low-level&quot; API that mimics RabbitMQ Java client&#39;s Channel interface and Pika. Everything else is built around it.</div>

<div><br></div><div>I am working on implementing basic.consume, basic.cancel, basic.deliver, basic.return and everything around</div><div>consumers and the &quot;push API&quot;. When that is done, I will cut</div><div>a first alpha/pre release. After that, there will be a lot of</div>

<div>[design] work for error handling/recovery. Potential</div><div>concurrency improvements and stress testing also will take a while.</div><div><br></div><div>If you want to see a feature in Bunny, now is the time to tell about it.<br>

</div><div>It is dead easy to add reasonable features now. I believe that </div><div>Bunny can be as good as or better than amqp gem in almost</div><div>every aspect. Help me make that happen.</div><div><br></div><div>Thank you.</div>

<div><br></div><div><br></div><div>1. <a href="https://groups.google.com/forum/?fromgroups=#!topic/ruby-amqp/crNVGEuHm68">https://groups.google.com/forum/?fromgroups=#!topic/ruby-amqp/crNVGEuHm68</a></div><div>2. <a href="https://github.com/ruby-amqp/bunny/commits/migrate_to_amq_protocol">https://github.com/ruby-amqp/bunny/commits/migrate_to_amq_protocol</a></div>

<div>3. <a href="https://github.com/michaelklishin/acits">https://github.com/michaelklishin/acits</a><br>-- <br>MK<br><br><a href="http://github.com/michaelklishin" target="_blank">http://github.com/michaelklishin</a><br>

<a href="http://twitter.com/michaelklishin" target="_blank">http://twitter.com/michaelklishin</a><br><br>
</div>