Ruby AMQP gem 0.8.0.rc13 is released.

This release of amqp gem has one backwards incompatibility with respect to
RC12,
several bug fixes and minor features as well as significant documentation
improvements
(mostly guides).

All users of previous 0.8.0 RCs are recommended to upgrade. Get it with

gem install amqp --pre --version "~> 0.8.0.rc13"


Backwards-incompatible change
================================================================================

* AMQP connection URIs that use slashes (/) in vhost names now must
URL-encode
them. With this change, connection URIs use the same conventions other
AMQP
ecosystem projects use instead of inventing our own thing.

Documentation: http://bit.ly/mfzwcB. Note that apps that use hashes for
connection (:host => "hub.megacorp.internal", :vhost => "production") are
not affected by this change.


Bug fixes
================================================================================

* AMQP::Exchange#publish callback is no longer double-fired when message is
published before asynchronous channel opening succeeds.

* When AMQ entities are declared multiple times using AMQP::Channel#queue
and
related methods, callback will be fired on 2nd, 3rd and subsequent
declarations even though object is taken from channel cache.

* When broker uses error messages longer than 127 characters,
AMQ::Protocol::Channel::Close#class_id and #method_id are now decoded
correctly.


Minor features and API usability improvements
================================================================================

* AMQP::Session#on_error lets applications handle connection-level
exceptions.
Example: http://bit.ly/maZmEv

* AMQP::Exchange#publish callback is now run on the next event loop tick.
This still DOES NOT OFFER ANY GUARANTEES that it is fired "after data is
sent" (because system calls EventMachine core relies on use buffering),
but is safe enough for 80% of the applications and works the way most
people
expect it to work.

* Message header values now can be floats, too. Since Ruby floats are
double
precision, Java client will unpack them as `double`.

* AMQP::Queue#initialize and AMQP::Channel#queue will now raise
ArgumentError
if queue name is given as `nil` instead of an empty string (for
server-named queues).

* When declaring a server-named queue, AMQP::Queue will now better check
that
arguments actually make sense (for example, :nowait doesn't make sense
because we need to receive generated name from the broker).

* Connection (AMQP::Session) now exposes #server_capabilities,
#server_authentication_mechanisms and #server_locales methods.

* AMQP::Channel#reset was originally meant to be used by the library itself
to handle network connectivity issues but is now safe to use by
applications,
should they need to.

* AMQP::Session#send was renamed to #send_frame and will never conflict
with
Ruby's Object#send on 1.8.7, even in the edgiest of cases.


Documentation improvements
================================================================================

Documentation guides improved a great deal, we can't possibly name all the
improvements. Some highlights are

* Installation routine specific to Windows 7 on C Rubies
* Integration with applications that run on Unicorn
* Typical queue lifecycle patterns
* Message acknowledgements, redelivery, rejection and negative
acknowledgements
* Consumer exclusivity
* QoS and message pre-fetching
* Fetching messages on demand ("pull API" with basic.get)
* Exchanges and queues durability, message persistence and related matters

Documentation is at http://bit.ly/amqp-gem-docs


Newly added examples cover

* Error handling (network connection failure, channel-level exceptions,
connection-
level exceptions)
* Accessible message metadata (aka envelope)
* Message acknowledgements & redelivery
* Handling of returned messages
* RabbitMQ AMQP extensions

Examples are at http://bit.ly/amq-gem-examples



Git commit list
================================================================================

Commit list:
https://github.com/ruby-amqp/amqp/compare/cd76e8c41d55...bd6125f738


What to expect in RC14 and RC15
================================================================================

RC14 will be focused on further improving error handling after network
failures.
RC15 will bring support for Ruby 1.8.7-p249 (this specific patch level)
back.

Of course, both releases will feature documentation improvements to extent
the
time permits.


When will final 0.8.0 be released?
================================================================================

When all documentation guides are written, proof-read and edited. We expect
it to
take between 1 and 2 months.


Follow @rubyamqp for updates
================================================================================

For updates on the state of Ruby AMQP ecosystem, follow @rubyamqp on
Twitter.


Thanks to everyone who contributed feedback and reported all the edge cases
and
API usability issues, especially Elias Levy, Jonathan Simms and Mark
Abramov.


ruby-amqp team [1] members.

1. https://github.com/ruby-amqp

--
MK
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/attachments/20110604/aede3e3d/attachment.htm>

Search Discussions

  • Matthias Radestock at Jun 4, 2011 at 6:26 pm
    Michael,

    it's great to see development of the amqp gem proceeding apace. There
    was one thing that caught my eye in the list of changes...
    On 04/06/11 19:11, Michael Klishin wrote:
    * When declaring a server-named queue, AMQP::Queue will now better
    check that
    arguments actually make sense (for example, :nowait doesn't make sense
    because we need to receive generated name from the broker).
    In protocol terms it actually *can* make sense to declare a server-named
    queue with 'nowait'. That's because AMQP has a little known feature:
    blank queue name in commands are substituted with the name of the most
    recently declared queue. Hence it is possible to, say, declare a
    server-named queue with 'nowait' and then bind it and consume from it.

    Regards,

    Matthias.
  • Alvaro Videla at Jun 5, 2011 at 5:52 pm
    Matthias,
    In protocol terms it actually *can* make sense to declare a server-named queue with 'nowait'. That's because AMQP has a little known feature: blank queue name in commands are substituted with the name of the most recently declared queue. Hence it is possible to, say, declare a server-named queue with 'nowait' and then bind it and consume from it.

    How is the "most recently declared queue" handled. Is it broker wide, or channel wide? Or per vhost, or user?

    -Alvaro
  • Matthias Radestock at Jun 5, 2011 at 6:04 pm

    On 05/06/11 18:52, Alvaro Videla wrote:
    How is the "most recently declared queue" handled. Is it broker wide,
    or channel wide? Or per vhost, or user?
    Channel. See
    http://www.rabbitmq.com/amqp-0-9-1-reference.html#domain.queue-name

    Matthias.

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouprabbitmq-discuss @
categoriesrabbitmq
postedJun 4, '11 at 6:11p
activeJun 5, '11 at 6:04p
posts4
users3
websiterabbitmq.com
irc#rabbitmq

People

Translate

site design / logo © 2022 Grokbase