Project

amqpop

0.0
No commit activity in last 3 years
No release in over 3 years
Command line AMQP consumer
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 2.12.0

Runtime

~> 0.9.8
 Project Readme

amqpop

Tool for dispatching a child command for each message consumed from an AMQP queue.

Benefits

Designed for situations where you need to consume and act on messages from an AMQP queue without a long running process.

Example

amqpop -h rabbit.domain.com -u user -n 2 -x logs -w 10 -- /usr/bin/ruby log_processor.rb

This command would do the following:

  • Make sure only 1 instance of this amqpop command is running by using a lock/pid file keyed based on the arguments of the command
  • Connect to the AMQP server rabbit.domain.com as user with password looked up from the auth file ~/.amqpop_auth
  • Attach a unique, non durable queue to the exchange named logs
  • Pass the message payload in as STDIN to /usr/bin/ruby log_processor.rb
  • Run up to 2 parallel processes of /usr/bin/ruby log_processor.rb
  • Once the queue has been exhausted of messages, wait for another message for 10 seconds, if one shows up inside of that time, process it immediately, and then wait for another 10 seconds and repeat, otherwise terminate.

Usage

amqpop [options] -- <child-command>

[options] are:
-h <s>:  AMQP host (default: localhost)
-u <s>:  AMQP user (default: guest)
-p <s>:  AMQP password (default: guest)
-n <i>:  Number of child message processing commands that can be executed in
         parallel (default: 1)
-q <s>:  Name of the queue on the to connect to, unique if not provided
         (default: )
    -e:  Is the queue persistent (default: true)
    -a:  Does the queue remove itself
-x <s>:  Exchange to bind the queue to. Format [name]:<routing>, example:
         logs or weather:usa.* (default: )
-w <i>:  Amount of time in seconds to wait for more messages to show up.
         Waits forever if 0 (default: 30)

--verbose, -v:   Verbose logging
--version, -r:   Print version and exit
   --help, -l:   Show this message

Auth File

You can put a file at ~/.amqpop_auth which is used to intelligently look up login credentials when calling amqpop. No more sensative information in the process list or in your history! Use one entry per line, in the format:

host    user    pass

Example:

192.168.1.1    consumer    1Consumer2
192.168.1.1    other       XYother$Z
rabbithost.domain.com    publisher_user    98pubPass234

The amount and kind of whitespace between host, user and pass don't matter, just don't use newlines.

Note: The auth file must have world readable and writable disabled (so 660 or 600 are ok)

Tested On

  • OSX 10.8.2, 10.7.5
  • Ruby 1.9.3-p327, 1.8.7-p358
  • RabbitMQ 2.8.7
    • on Erlang R14A, Debian 6.0, kernel 2.6.32-5-686
    • on Erlang R14B04, RedHat EL5, kernel 2.6.18-238.9.1.el5xen

Acknowledgements

Thank you to William Morgan and the contributors of Trollop (http://trollop.rubyforge.org/)