README.md in amqp-0.8.0.rc13 vs README.md in amqp-0.8.0.rc14
- old
+ new
@@ -1,13 +1,13 @@
# About Ruby amqp gem #
Ruby amqp gem is a widely used, feature-rich, well-maintained asynchronous AMQP 0.9.1 client with batteries included.
This library works with Ruby 1.8.7 (p174 and p334), Ruby 1.9.2, [JRuby](http://jruby.org) (highly recommended to Microsoft Windows users), [REE](http://www.rubyenterpriseedition.com) and [Rubinius](http://rubini.us), and is licensed under the [Ruby License](http://www.ruby-lang.org/en/LICENSE.txt)
-Versions 0.8.0 and later of amqp gem implement [AMQP 0.9.1](http://bit.ly/hw2ELX) and supports [RabbitMQ extensions to AMQP 0.9.1](http://www.rabbitmq.com/extensions.html).
+Versions 0.8.0.RC13 and later of amqp gem implement [AMQP 0.9.1](http://bit.ly/amqp-model-explained) (see also [AMQP 0.9.1 spec document](http://bit.ly/hw2ELX)) and support [RabbitMQ extensions to AMQP 0.9.1](http://www.rabbitmq.com/extensions.html).
-[![Continuous Integration status](http://travis-ci.org/ruby-amqp/amqp.png)](http://travis-ci.org/ruby-amqp/amqp)
+[![Continuous Integration status](https://secure.travis-ci.org/ruby-amqp/amqp.png)](http://travis-ci.org/ruby-amqp/amqp)
## I know what AMQP is, how do I get started? ##
See [Getting started with amqp gem](http://bit.ly/getting-started-with-amqp-ruby-gem) and other [documentation guides](http://bit.ly/amqp-gem-docs).
@@ -18,11 +18,11 @@
AMQP is an [open standard for messaging middleware](http://www.amqp.org/confluence/display/AMQP/About+AMQP) that
emphasizes interoperability between different technologies (for example, Java, .NET, Ruby, Python, Node.js, Erlang, C and so on).
Key features of AMQP are very flexible yet simple routing and binary protocol efficiency. AMQP supports many sophisticated features, for example,
-message acknowledgements, returning messages to producer, delivery confirmation, flow control and so on.
+message acknowledgements, returning of messages to producer, redelivery of messages that couldn't be processed, load balancing between message consumers and so on.
## What is amqp gem good for? ##
One can use amqp gem to make Ruby applications interoperate with other
@@ -30,24 +30,28 @@
simple work queues to complex multi-stage data processing workflows that involve
dozens or hundreds of applications built with all kinds of technologies.
Specific examples:
+ * Events collectors, metrics & analytics applications can aggregate events produced by various applications
+ (Web and not) in the company network.
+
* A Web application may route messages to a Java app that works
with SMS delivery gateways.
- * Periodically run (Cron-driven) application may notify other systems that
- there are some new results.
+ * MMO games can use flexible routing AMQP provides to propagate event notifications to players and locations.
+ * Price updates from public markets or other sources can be distributed between interested parties, from trading systems to points of sale in a specific geographic region.
+
* Content aggregators may update full-text search and geospatial search indexes
by delegating actual indexing work to other applications over AMQP.
* Companies may provide streaming/push APIs to their customers, partners
or just general public.
- * A new shiny Ruby-based system may be integrated with an existing C++-based component
- using AMQP.
+ * Continuous integration systems can distribute builds between multiple machines with various hardware and software
+ configurations using advanced routing features of AMQP.
* An application that watches updates from a real-time stream (be it markets data
or Twitter stream) can propagate updates to interested parties, including
Web applications that display that information in the real time.
@@ -65,15 +69,15 @@
### Install the gem ###
On Microsoft Windows 7
gem install eventmachine --pre
- gem install amqp --pre --version "~> 0.8.0.RC12"
+ gem install amqp --pre
On other OSes or [JRuby](http://jruby.org):
- gem install amqp --pre --version "~> 0.8.0.RC12"
+ gem install amqp --pre
### "Hello, World" example ###
#!/usr/bin/env ruby
@@ -108,19 +112,20 @@
exchange.publish "Hello, world!", :routing_key => queue.name
end
[Getting started guide](http://bit.ly/getting-started-with-amqp-ruby-gem) explains this and two more examples in detail,
-and is written in a form of a tutorial.
+and is written in a form of a tutorial. See [AMQP Model Explained](http://bit.ly/amqp-model-explained) if you want
+to learn more about AMQP principles & concepts.
## Documentation: tutorials, guides & API reference ##
We believe that in order to be a library our users **really** love, we need to care about documentation as much as (or more)
code readability, API beauty and autotomated testing across 5 Ruby implementations on multiple operating systems. We do care
-about our documentation: **if you don't find your answer in documentation, we consider it a high severity bug** that you
+about our [documentation](http://bitly.com/amqp-gem-docs): **if you don't find your answer in documentation, we consider it a high severity bug** that you
should [file to us](http://github.com/ruby-amqp/amqp/issues). Or just complain to [@rubyamqp](https://twitter.com/rubyamqp) on Twitter.
### Tutorials ###
@@ -138,14 +143,17 @@
### Examples ###
You can find many examples (both real-world cases and simple demonstrations) under [examples directory](https://github.com/ruby-amqp/amqp/tree/master/examples) in the repository.
Note that those examples are written against version 0.8.0.rc1 and later. 0.6.x and 0.7.x may not support certain AMQP protocol or "DSL syntax" features.
+There is also a work-in-progress [Messaging Patterns and Use Cases With AMQP](http://bit.ly/amqp-gem-patterns) documentation guide.
+
### Documentation guides ###
-[Documentation guides](http://bit.ly/amqp-gem-docs) describe the library itself as well as AMQP usage scenarios, topics like routing, error handing & recovery, broker-specific extensions, TLS support, troubleshooting and so on.
+[Documentation guides](http://bit.ly/amqp-gem-docs) describe the library itself as well as AMQP concepts, usage scenarios, topics like working with exchanges and queues,
+error handing & recovery, broker-specific extensions, TLS support, troubleshooting and so on. Most of the documentation is in these guides.
### API reference ###
[API reference](http://bit.ly/mDm1JE) is up on [rubydoc.info](http://rubydoc.info) and is updated daily.
@@ -163,11 +171,11 @@
## Community
* Join [Ruby AMQP mailing list](http://groups.google.com/group/ruby-amqp)
* Follow [@rubyamqp](https://twitter.com/rubyamqp) on Twitter for Ruby AMQP ecosystem updates.
* Join also [RabbitMQ mailing list](https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss) (AMQP community epicenter).
- * Stop by #rabbitmq on irc.freenode.net. You can use [Web IRC client](http://webchat.freenode.net?channels=rabbitmq) if you don't have an IRC client installed.
+ * Stop by #rabbitmq on irc.freenode.net. You can use [Web IRC client](http://webchat.freenode.net?channels=rabbitmq) if you don't have IRC client installed.
## Links ##
@@ -221,20 +229,22 @@
### So, does amqp gem only work with RabbitMQ? ###
This library is developed and tested primarily with [RabbitMQ](http://rabbitmq.com), although it should be compatible with any
server implementing the [AMQP 0.9.1 spec](http://bit.ly/hw2ELX). For AMQP 0.8 brokers, use amqp gem version 0.7.x.
-### Why isn't Ruby 1.8.7.-p249 supported? ###
+### Why isn't Ruby 1.8.7.-p249 supported? Will it be supported in the future? ###
-Because there is absolutely no way we can both make code like the following (pseudo-synchronous) work
+In order to make code like the following (pseudo-synchronous) work
conn = AMQP.connect
ch = AMQP::Channel.new(conn)
ex = ch.default_exchange
ex.publish(some_data)
-and not be affected by this [Ruby 1.8.7-p249-specific bug (super called outside of method)](http://bit.ly/iONBmH)
+and not be affected by this [Ruby 1.8.7-p249-specific bug (super called outside of method)](http://bit.ly/iONBmH), we need to
+avoid any inheritance for key amqp gem classes: Channel, Queue, Exchange. This will take a moderate refactoring effort, and
+is likely to happen in 0.8.0.RC15.
### How does amqp gem relate to amq-client gem, amq-protocol and libraries like bunny? ###
See [this page about AMQP gems family](https://github.com/ruby-amqp/amq-client/blob/master/README.textile)