RabbitMQ を Perl から利用するため、AMQP Client と管理用のコマンドラインツールを作りました
素直な書き方をしている*1ので、コードを読んでもらえれば AMQP が何か解ります。*2
cooldaemon's RabbitFoot at master - GitHub
AMQP Client の概要
RabbitFoot という名前です。内部で Net::AMQP を利用しています。
RabbitMQ 1.7.0 が対応している AMQP のクラスとメソッドにだけ対応しています。具体的には下記の通りです。
Exchange | Declare, Delete |
---|---|
Queue | Declare, Delete, Bind, Unbind |
Basic | Publish, Consume, Get, Ack, Recover, QoS |
Tx | Select, Commit, Rollback |
Multi Channel に対応する事が面倒だったため、Single Channel で動作します。*3
逐次処理で同期的に利用する事を想定しているため、非同期メソッドを実行する際、引数によっては処理を一定時間ブロックします。*4
RabbitMQ 1.7.0 のコードを読むと、Bind を削除するメソッドもあるようなので、amqp0-8.xml を書き換えて実装するかもしれません。実装しました。
以下、SYNOPSIS から抜粋です。
my $rf = RabbitFoot->new({ timeout => 1, })->load_xml_spec( '/path/to/amqp0-8.xml', )->connect({ host => 'localhosti', port => 5672, user => 'guest', port => 'guest', vhost => '/', }); $rf->declare_exchange({exchange => 'test_exchange'});
上記は、Exchange を定義する例です。
他の使い方は、xt/04_use_server.t をご確認ください。
コマンドラインツールについて
rabbit_foot という名前です。引数無しで実行すると使い方が出力されます。
手抜きをするために Moose と MooseX::App::Cmd を使っているので、環境によっては重いかもしれません。*5
% /path/to/rabbit_foot Available commands: commands: list the application's commands help: display a command's help screen bind_queue: bind queue to an exchange declare_exchange: declare exchange, create if needed declare_queue: declare queue, create if needed delete_exchange: delete a exchange delete_queue: delete a queue purge_queue: purge a queue unbind_queue: unbind queue to an exchange
上記の通り、Queue や Exchange を定義したり削除したりできます。
各コマンドの使い方は help で出力されます。例えば "rabbit_foot help declare_exchange" とすると declare_exchange で使える引数が表示されます。
引数の初期値は、config.json で指定する事ができるので、ホスト名やポート番号は、こちらに記述しておくと便利です。
RabbitMQ と AMQP について
概念や実際の使い方は、第四回 Erlang 分散システム勉強会 : ATND で話をさせて頂きます。