## Changes Between 1.4.x and 1.5.0
### Only Await basic.consume-ok If nowait is false
Contributed by Rian McGuire.
### Server-Named Queue Recovery Fix
Server-named queues are now correctly recovered again.
Contributed by Jack C Hong.
## Changes Between 1.3.x and 1.4.0
### connection.blocked Support
[connection.blocked](https://www.rabbitmq.com/connection-blocked.html) notifications
are now correctly supported by the library:
``` ruby
EventMachine.run do
connection = AMQP.connect(:host => '127.0.0.1')
connection.on_blocked do |conn, conn_blocked|
puts "Connection blocked, reason: #{conn_blocked.reason}"
end
connection.on_unblocked do |conn, _|
puts "Connection unblocked"
end
end
```
= Version 0.8.0
* [API] AMQP::Session#on_skipped_heartbeats callback that can be used to handle skipped heartbeats (for cases when TCP network failure detection is not timely enough)
* [API] AMQP::Exchange#publish calls now use a mutex on the channel exchange is declared on. Sharing channels between threads is discouraged but amqp gem covers your back in the most dangerous case.
* [API] AMQP::Channel#synchronize now can be used to guarantee mutual exclusion of multiple threads on channel instances.
* [BUG] Empty messages can finally be published fine. Yes, it took us just 3 years.
* [FEATURE] When connected to RabbitMQ, RabbitMQ-specific extensions are required automatically
* [FEATURE] AMQP::Session#broker and AMQP::Broker allow for broker capabilities inspection
* [FEATURE] New bitset-based channel id allocator
* [FEATURE] Multiple consumers per queue with AMQP::Consumer
* [FEATURE] Automatic recovery mode for channels
* [FEATURE] Network connection recovery callbacks for channels, exchanges, queues, consumers
* [API] Connection URI (string) format for vhosts no longer assumes that vhosts begin with a slash (/), learn more at http://bit.ly/mfzwcB
* [FEATURE] Returned messages, including header & content via AMQP::Exchange#on_publish. Callback accepts 3 args: basic_return, header, body
* [BUG] Ruby 1.8.7-p249 is not supported because of this (p249-specific) Ruby bug: http://bit.ly/iONBmH
* [FEATURE] AMQP::Utilities::EventLoopHelper detects app server (if any) being used and starts EventMachine reactor in an optimal way.
* [FEATURE] AMQP 0.9.1 support, including tx.* operations class.
* [API] Default authentication handler now raises AMQP::PossibleAuthenticationFailureError
* [API] AMQP::Channel#initialize now takes 3rd (optional) options hash.
* [API] Broker connection class is now AMQP::Session.
* [API] AMQP::Error instance now may carry cause, an exception that caused exception in question to be raised.
* [API] When initial TCP connection fails, default action is now to raise AMQP::TCPConnectionFailed.
* [API] AMQP::BasicClient#reconnect now takes 2nd optional argument, period of waiting in seconds.
* [FEATURE] Handlers for initial connection failure, connection loss; channel-level exceptions handlers on Channel instances.
* [API] AMQP::Exchange#initialize now accepts :arguments option that takes a hash.
* [API] AMQP::Queue#initialize now accepts :arguments option that takes a hash.
* [API] AMQP#Logger is deprecated. It will be removed before 1.0 release.
* [API] AMQP#fork is deprecated. It will be removed before 1.0 release.
* [API] AMQP::RPC is deprecated. It will be removed before 1.0 release.
* [FEATURE] Significant improvements to the documentation. From now on lack of/poor documentation is considered a severe bug.
* [FEATURE] Support for RabbitMQ extensions to AMQP 0.9.1
* [API] AMQP::Exchange#publish now accepts (an optional) callback.
* [API] AMQP::Channel.new now accepts (an optional) callback.
* [API] AMQP::Header#ack now can acknowledge multiple deliveries
* [API] AMQP::Exchange#delete now takes (an optional) block that is called when exchange.delete-ok response arrives.
* [API] AMQP::Header now implements #to_hash
* [API] AMQP::Queue#pop block now can take 1, 2 or 3 arguments.
* [API] AMQP::Queue#purge now takes an optional block which is called when queue.purge-ok response arrives.
* [API] AMQP::Queue#delete now takes an optional block which is called when queue.delete-ok response arrives.
* [API] AMQP::Queue#delete now accepts :nowait option.
* [API] AMQP::Queue#unbind now takes an optional block which is called when queue.unbind-ok response arrives.
* [API] AMQP::Queue#unbind now accepts :routing_key as alias to :key. we believe it is a good idea to use AMQP terms.
* [API] AMQP::Channel#prefetch now takes (an optional) 2nd parameter that specifies that QoS settings should be applied to underlying connection, as well as optional callback.
* [API] AMQP::Channel#recover now takes (an optional) callback that is called when basic.recover-ok is received.
* [API] AMQP::Frame is gone.
* [API] AMQP::Buffer is gone. Serialization & framing are now handled primarily by amq-protocol.
* [API] AMQP::Queue#publish is deprecated.
* [API] Name argument for AMQP::Queue.new and Channel#queue is optional.
= Version 0.7.2
* [BUG] Server-named queues declared en masse now get their unique names instead of all beign assigned the first generated name
* [API] Connection URI (string) format for vhosts no longer assumes that vhosts begin with a slash (/), learn more at http://bit.ly/mfzwcB
* [BUG] Queue#reset leaks consumer tags [#40].
Here is partial changes:
= Version 0.7.2
* [BUG] Server-named queues declared en masse now get their unique names instead of all beign assigned the first generated name
* [API] Connection URI (string) format for vhosts no longer assumes that vhosts begin with a slash (/), learn more at http://bit.ly/mfzwcB
* [BUG] Queue#reset leaks consumer tags [#40].
= Version 0.7.1
* [BUG] AMQP gem no longer conflicts with Builder 2.1.2 on Ruby 1.9.
All Ruby on Rails 3 users who run Ruby 1.9 are highly recommended
to upgrade!
* [API] AMQP::Exchange.default no longer caches exchange object between calls
because it may lead to very obscure issues when channel that exchange was
using is closed (due to connection loss, as part of test suite teardown
or in any other way).
* [API] AMQP::Exchange.default now accepts channel as a parameter.
* [API] AMQP::Exchange#channel
* [BUG] Basic.Return is not supported by amqp gem yet, but it should not result in obscure exceptions
* [API] AMQP::Exchange#publish now supports content type overriding.
* [API] Introduce AMQP::Exchange #durable?, #transient?, #auto_deleted? and #passive?
* [API] Introduce AMQP::Channel#open?
* [BUG] AMQP connection was considered established prematurely.
* [API] MQ.logging is removed; please use AMQP.logging from now on.
* [API] MQ::Queue class is deprecated; please use AMQP::Queue from now on.
* [API] MQ::Exchange class is deprecated; please use AMQP::Exchange from now on.
* [API] MQ class is deprecated; please use AMQP::Channel from now on.
* [API] require "mq" is deprecated; please use require "amqp" from now on.
= Version 0.7
* [BUG] Sync API for queues and exchanges, support for server-generated queues & exchange names (via semi-lazy collection).
* [BUG] Sync API for MQ#close (Channel.Close) [issue #34].
* [FEATURE] AMQP URL from majek's fork, with some fixes. Example: AMQP.start("amqps://")
* [DEVELOP] Added some em-spec-based specs, bin/irb, Gemfile.
* [FEATURE] Added MQ::Exchange.default for the default exchange.
* [FEATURE] Raise an exception if we're trying to use Basic.Reject with RabbitMQ.
* [FEATURE] Fail if an entity is re-declared with different options.
* [BUG] Don't reconnect if the credentials are wrong.
* [BUG] Fixed an exception which occurred when Queue#bind was called synchronously with a callback.
* [DEVELOPMENT] Added a lot of specs (Bacon replaced by rSpec 2).
No changelog published; from the commit history:
* Allow :no_declare=>true on new Exchanges to prevent sending Exchange.Declare
* Add MQ::Queue#purge (thanks Uwe Kubosch)
* Avoid opts.delete() to prevent issues during reconnect and wrapper apis that pass in options
* Add MQ#recover to redeliver unackd messages
* Add :confirm => some_proc for Queue#subscribe to receive ConsumeOk
* Make rpc return queues autodelete
* Re-send prefetch command on reconnect
* Stop adding to the load path, use File.expand_path instead
* Remove a queue from MQ#queues on CancelOk if it is autodelete
AMQP client implementation in Ruby/EventMachine.
This library was tested primarily with RabbitMQ, although it should
be compatible with any server implementing the AMQP 0-8 spec.