Simple AMQP driver for Ruby/EventMachine
(c) 2008 Aman Gupta (tmm1)
http://github.com/tmm1/amqp
http://rubyforge.org/projects/amqp
http://hopper.squarespace.com/blog/2008/7/22/simple-amqp-library-for-ruby.html
http://groups.google.com/group/ruby-amqp
http://lists.rabbitmq.com/pipermail/rabbitmq-discuss/2008-July/001417.html
This library works with Ruby 1.8, Ruby 1.9 and JRuby.
This library was tested primarily with RabbitMQ, although it should be compatible with any server implementing the AMQP 0-8 spec.
To use with RabbitMQ, first run the server:
hg clone http://hg.rabbitmq.com/rabbitmq-codegen
hg clone http://hg.rabbitmq.com/rabbitmq-server
cd rabbitmq-server
make run
To get started, refer to the various bundled examples:
ruby examples/mq/pingpong.rb # 1-1 communication using amq.direct
ruby examples/mq/clock.rb # 1-N communication using amq.fanout
ruby examples/mq/stocks.rb # 1-subscriber communication using amq.topic
ruby examples/mq/multiclock.rb # header based routing (new rabbitmq feature)
ruby examples/mq/ack.rb # using ack
ruby examples/mq/pop.rb # pop off messages one at a time
ruby examples/mq/hashtable.rb # simple async rpc layer
ruby examples/mq/primes.rb 4 # parallelized prime number generation
ruby examples/mq/logger.rb # simple logging api
For more details into the lower level AMQP client API, run the simple client example:
ruby examples/amqp/simple.rb # low-level AMQP api
ruby examples/mq/internal.rb # low-level Queue/Exchange api
Or refer to protocol/doc.txt, which enumerates packets sent between a server and client during a typical session, in both binary and decoded formats.
To run the test suite:
rake spec
The lib/amqp/spec.rb file is generated automatically based on the AMQP specification. To generate it:
rake codegen
This project was inspired by py-amqplib, rabbitmq, qpid and rubbyt. Special thanks to Dmitriy Samovskiy, Ben Hood and Tony Garnock-Jones.
AMQP resources:
Servers:
RabbitMQ (Rabbit Technologies, Erlang/OTP, MPL) - http://rabbitmq.com
ZeroMQ (iMatix/FastMQ/Intel, C++, GPL3) - http://www.zeromq.org
OpenAMQ (iMatix, C, GPL2) - http://openamq.org
ActiveMQ (Apache Foundation, Java, apache2) - http://activemq.apache.org
Steve Vinoski explains AMQP in his column, Towards Integration
http://steve.vinoski.net/pdf/IEEE-Advanced_Message_Queuing_Protocol.pdf
John O'Hara on the history of AMQP
http://www.acmqueue.org/modules.php?name=Content&pa=showpage&pid=485
Dmitriy's presentation on RabbitMQ/AMQP
http://somic-org.homelinux.org/blog/2008/07/31/slides-for-my-amqprabbitmq-talk/
ZeroMQ's analysis of the messaging technology market
http://www.zeromq.org/whitepapers:market-analysis
Pieter Hintjens's background to AMQP
http://www.openamq.org/doc:amqp-background
Barry Pederson's py-amqplib
http://barryp.org/software/py-amqplib/
Ben Hood on writing an AMQP client
http://hopper.squarespace.com/blog/2008/6/21/build-your-own-amqp-client.html
Dmitriy Samovskiy introduces Ruby + QPid + RabbitMQ
http://somic-org.homelinux.org/blog/2008/06/24/ruby-amqp-rabbitmq-example/
Ben Hood's as3-amqp
http://github.com/0x6e6562/as3-amqp
http://hopper.squarespace.com/blog/2008/7/4/server-side-as3.html
http://hopper.squarespace.com/blog/2008/3/24/as3-amqp-client-first-cut.html
RabbitMQ's protocol code generator
http://hg.rabbitmq.com/rabbitmq-codegen/
Erlang Exchange presentation on the implementation of RabbitMQ
http://skillsmatter.com/podcast/erlang/presenting-rabbitmq-an-erlang-based-implementatio-nof-amqp
http://www.lshift.net/blog/2008/07/01/slides-from-our-erlang-exchange-talk
Jonathan Conway's series on RabbitMQ and using it with Ruby/Merb
http://jaikoo.com/2008/3/20/daemonize-rabbitmq
http://jaikoo.com/2008/3/14/oh-hai-rabbitmq
http://jaikoo.com/2008/2/29/friday-round-up-2008-02-29
http://jaikoo.com/2007/9/4/didn-t-you-get-the-memo
Open Enterprise's series on messaging middleware and AMQP
http://www1.interopsystems.com/analysis/can-amqp-break-ibms-mom-monopoly-part-1.html
http://www1.interopsystems.com/analysis/can-amqp-break-ibms-mom-monopoly-part-2.html
http://www1.interopsystems.com/analysis/can-amqp-break-ibms-mom-monopoly-part-3.html
Messaging and distributed systems resources:
A Critique of the Remote Procedure Call Paradigm
http://www.cs.vu.nl/~ast/publications/euteco-1988.pdf
A Note on Distributed Computing
http://research.sun.com/techrep/1994/smli_tr-94-29.pdf
Convenience Over Correctness
http://steve.vinoski.net/pdf/IEEE-Convenience_Over_Correctness.pdf
Metaprotocol Taxonomy and Communications Patterns
http://hessian.caucho.com/doc/metaprotocol-taxonomy.xtp
Joe Armstrong on Erlang messaging vs RPC
http://armstrongonsoftware.blogspot.com/2008/05/road-we-didnt-go-down.html
SEDA: scalable internet services using message queues
http://www.eecs.harvard.edu/~mdw/papers/seda-sosp01.pdf