Ruby 製メッセージキュー reliable-msg

reliable-msg

俗に言うメッセージキュー。キューを保持しており、 Push, Pop が可能。
Push されたメッセージはファイルあるいはデータベースに永続化され、
キューに(意図せぬ)再起動などがあったとしてもメッセージがロストしない。

reliable-msg のインストール

$ gem install reliable-msg
導入における問題点
  • ruby 1.9 系では動作しない
  • reliable-msg 1.1.0 は、依存ライブラリ uuid の最新版が動作しない
    • uuid の 1.x 系列ならば動作する
    • reliable-msg 1.2.0 ならば uuid 2.x 系列にも対応済
    • しかし、github にソースがあるのみで rubygems.org にはまだ push されていない
上記を踏まえた reliable-msg のインストール
$ gem install uuid -v "<2.0.0"
$ gem install reliable-msg

reliable-msg を動作させてみる

Manager プロセス起動
$ queues manager start
I, [2011-03-29T00:22:04.866701 #10296]  INFO -- : Created queues configuration file in: /usr/lib/ruby/gems/1.8/gems/reliable-msg-1.1.0/queues.cfg
I, [2011-03-29T00:22:04.866866 #10296]  INFO -- : Using message store: disk
I, [2011-03-29T00:22:04.875094 #10296]  INFO -- : Accepting requests at: druby://localhost:6438
キューにメッセージを Push する

別窓で。 queue.hoge ってキューに対して "moemoe" ってオブジェクトを Push する

$ irb -rubygems -r reliable-msg
irb(main):001:0> q = ReliableMsg::Queue.new "queue.hoge"
=> #<ReliableMsg::Queue:0xb7511960 @queue="queue.hoge">
irb(main):002:0> q.put "moemoe"
=> "9291f0f0-3b7d-012e-ca6f-58d385ae4bfe"
irb(main):003:0>
キューからメッセージを Pop する

別窓で。 queue.hoge ってキューからオブジェクトを Pop する
プロセス境界を超えてオブジェクトのやりとりが出来ている。
事前に Push されていたメッセージは
Manager プロセスが再起動されたとしても次回起動時に復元される

$ irb -rubygems -r reliable-msg
irb(main):001:0> q = ReliableMsg::Queue.new "queue.hoge"
=> #<ReliableMsg::Queue:0xb74dde08 @queue="queue.hoge">
irb(main):002:0> q.get
=> #<ReliableMsg::Message:0xb74d9664 @headers={:priority=>0, :expires=>nil, :delivery=>:best_effort, :id=>"9291f0f0-3b7d-012e-ca6f-58d385ae4bfe", :max_deliveries=>5, :created=>1301325944}, @object="moemoe", @id="9291f0f0-3b7d-012e-ca6f-58d385ae4bfe">
irb(main):003:0>