Ruby 製メッセージキュー reliable-msg
reliable-msg
俗に言うメッセージキュー。キューを保持しており、 Push, Pop が可能。
Push されたメッセージはファイルあるいはデータベースに永続化され、
キューに(意図せぬ)再起動などがあったとしてもメッセージがロストしない。
reliable-msg のインストール
$ gem install reliable-msg
導入における問題点
上記を踏まえた 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>