Hey, Michael, congratulations with the release!<div><br><div>I'm in the process of migrating of some code from bunny 0.8 to 0.9 pre, and there are some breaking api changes that aren't mentioned in the changelog.</div><div><br></div><div>What I've found so far:&nbsp;</div><div>1. Bunny connection instance no longer has #queue and #exchange methods, you need to explicitly create and use channel instances</div><div>2. Channels don't have #exchange method either, you need to use one of the #topic, #direct or #fanout methods to declare specific type of queue, or #default_exchange for the default topic exchange (new convenience methods are actually mentioned in the changelog)</div><div>3. Exchange#publish: :key option is now :routing_key</div><div>4. Exchange#publish (and I reckon, other methods too) now does actual packet sending asynchronously in the background, returning immediately. Prior versions returned after receiving publish-ok packet.</div><div>5. Queue#subscribe no longer has :message_max and :timeout options</div></div><div>6. Queue#subscribe block signature is different from what Queue#pop returns (2 args vs 3 args)</div><div>7. You can't break from Queue#subscribe block anymore. LocalJumpError will arise. That it worked was probably a hack.&nbsp;</div><div>8. You can't exit from the subscription block anymore? After some fiddling I found that `throw :terminate` works. Is it the right way?</div><div>9. Bunny seems to be thread-safe now (as in safely reuse the same bunny / channel / exchange / queue instances in different threads). If so, then yay!</div><div><br></div><br>On Wednesday, November 28, 2012 1:56:39 AM UTC+4, Michael Klishin wrote:<blockquote class="gmail_quote" style="margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;">After a recent [1] announcement of what's going on with Bunny 0.9,<div>time for initial preview release and some feedback gathering.</div><div><br></div><div>0.9.0.pre1 is up on <a href="http://rubygems.org" target="_blank">rubygems.org</a>:</div>

<div><a href="https://rubygems.org/gems/bunny/versions/0.9.0.pre1" target="_blank">https://rubygems.org/gems/<wbr>bunny/versions/0.9.0.pre1</a><br></div><div><br></div><div>What's in the box?</div><div><br></div><div>&nbsp;* All AMQP 0.9.1 features implemented</div>

<div>&nbsp;* Proper content framing: you now can publish empty messages and messages larger than max frame size (128K)</div><div>&nbsp;* "Real" support for consumers (Bunny::Queue#subscribe): Bunny no longer reimplements some RabbitMQ features in the client, now runs consumer handlers in a thread pool.</div>

<div>&nbsp;* All but one RabbitMQ extension to the protocol (publisher confirms) are supported, more nice features to come in the future</div><div>&nbsp;* Operations that block and return values in earlier releases still work the same way, however, network activity and dispatch of incoming messages (deliveries, returned messages) now happens in separate threads. This means that Rubinius and JRuby, Bunny even will now use multiple cores if available.</div>

<div><br></div><div>In addition, Bunny now uses amq-protocol under the hood so all improvements there<br></div><div>will benefit both amqp gem and Bunny.</div><div><br></div><div>Now, Bunny has always been a little scarse on documentation and this release has some</div>

<div>breaking API changes (almost all are around consumer-related functionality, so if you only</div><div>publish messages, it should be nearly completely backwards-compatible). Where to</div><div>find what the new API looks like?</div>

<div><br></div><div>The answer is in our new shiny test suite:</div><div><a href="https://github.com/ruby-amqp/bunny/tree/migrate_to_amq_protocol/spec/higher_level_api/integration" target="_blank">https://github.com/ruby-amqp/<wbr>bunny/tree/migrate_to_amq_<wbr>protocol/spec/higher_level_<wbr>api/integration</a><br>

</div><div><br></div><div>And here's initial bits of the change log, which will be greatly expanded before 0.9.0 final:</div><div><a href="https://github.com/ruby-amqp/bunny/blob/migrate_to_amq_protocol/ChangeLog.md" target="_blank">https://github.com/ruby-amqp/<wbr>bunny/blob/migrate_to_amq_<wbr>protocol/ChangeLog.md</a><br>

</div><div><br></div><div>I encourage you to take a look and ideally give it a try.</div><div><br></div><div>What is left to be done:</div><div><br></div><div>&nbsp;* Specifics around how to handle error conditions, network splits, &nbsp;</div>

<div>&nbsp;* Graceful consumer shutdown</div><div>&nbsp;* Publisher confirms support with a nice API (e.g. Bunny::Exchange#publish_and_<wbr>wait_for_confirmation)</div><div>&nbsp;* Documentation guides (we will port content and examples from <a href="http://rubyamqp.info" target="_blank">http://rubyamqp.info</a>)</div>

<div>&nbsp;* Proper change log</div><div>&nbsp;* HTTP API support, if time permits and there is enough interest</div><div><br></div><div>This is the first preview of several: while most of the work is done, to compensate</div><div>

for some breaking changes in this version, we will have to spend some time really</div><div>polishing and documenting it.</div><div><br></div><div>I personally really like how the new Bunny shapes up. I think it can be a better</div>

<div>RabbitMQ Ruby client than amqp gem in almost every aspect. But to make it so,</div><div>we need more input from developers like you. Please give it a try and tell us what you think!</div><div><br></div><div><br></div>

<div>1.&nbsp;<a href="https://groups.google.com/forum/?fromgroups=#!topic/ruby-amqp/7gxdN9xxeOE" target="_blank">https://groups.google.com/<wbr>forum/?fromgroups=#!topic/<wbr>ruby-amqp/7gxdN9xxeOE</a><br>-- <br>MK<br><br><a href="http://github.com/michaelklishin" target="_blank">http://github.com/<wbr>michaelklishin</a><br>

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