Qudo::Manual::JA::Tutorial - Qudo's sample code document lang:ja
QudoでJobを処理するためには、ClientとWorkerを作成する必要があります。
ここではサンプルを用いながら、それぞれの作成方法について解説していきます。
Qudoを使うにはデータをストアするためにQudo用のデータベースを設定する必要があります。 現在対応しているRDBMSは「MySQL」,「SQLite」,「PostgreSQL」です。
スキーマのsetupでは付属のqudoコマンドで行ってください
QudoでJob Queueingを行うクライアントは以下のように書きます
# in your script: use Qudo; my $client = Qudo->new( driver_class => 'Skinny', # DBIx::Skinny databases => [ +{ dsn => 'dbi:SQLite:/tmp/qudo.db', username => '', password => '', } ], ); # enqueue job $client->enqueue("Your::Worker::Mail", { arg => $user->email, uniqkey => $user->login_id});
まずQudoのオブジェクトを作成します。
JobをQueueingするデータベースを指定してオブジェクトを作成します。
Qudoでは複数のデータベースへの接続をサポートしています。
オブジェクト作成時の第二引数は必ず、データベース接続情報のhashrefを配列にして、
そのリファレンスを渡す形にしてください。
作成したオブジェクトを元にJobをenqueueします。
enqueueメソッドの
第一引数はJobを処理させるWorkerのpackage名
第二引数はWorkerが使う引数の情報
この例の場合、Jobを処理するクラスとしてYour::Worker::Mailを指定し、
処理させる引数として$user->email(メールアドレス)を指定し、
Jobのユニークキーとして$user->login_id(ログインID)を指定しています。
その他第二引数のhashrefに指定出来るオプションとしては、以下があります
run_after … ここに秒数を指定することで、現在から何秒後に処理を開始させるかを指定出来ます。
priority … ここに優先度を指定することで、その種類のjobの中でpriotiry値が高いものから順に処理がされます
クライアントが行う処理はこれだけです。
あとはこれから作成するYour::Worker::Mailが処理してくれます。
queueingされたJobを処理していくworkerを作成します
package Your::Worker::Mail; use base 'Qudo::Worker'; sub work { my ($class, $job) = @_; print $job->arg; #print $user->email; # send mail process... if ($cannot_send_mail) { die "cannot send mail: reason"; # the message is logged to exception_log } $job->completed; # finished job! } 1;
Qudo::Wokerを継承したクラスを作成し、
『必ず』workメソッドをオーバーライドしてください。
workメソッドの第二引数にはJobの情報が丸々わたってきます。
$job->argメソッドでQueueingする際に指定した、Workerに使ってほしいと指定された引数情報が格納されています。
次に、 workerを起動するスクリプトを以下のように用意します
# ex) qudo-worker.pl : use Qudo; my $worker = Qudo->new( driver_class => 'Skinny', databases => [ +{ dsn => 'dbi:SQLite:/tmp/qudo.db', username => '', password => '', } ], manager_abilities => [qw/Your::Worker::Mail/], # set worker ); $worker->work(); # boot manager # work work work!
clientと同じようにワーカーが使うデータベースを指定してQudoのオブジェクトを作成します。
この時にmanager_abilitiesの引数をつかって、
このworkerが管理するWorkerクラスを指定します。
$worker->work()メソッドを呼び出すことで、
JobがQueueingされる毎にWorkerクラスを呼び出して処理させています。
基本的にはこれだけです。
簡単でしょ:)
workメソッド内では無限ループが発生し、JobがQueueingたびにJobに対応するWorkerに処理が移譲されます。
QudoではJobをstoreする仕組みを差し替える事ができます。
デフォルトではDBIx::Skinnyを利用しRDBMSを利用したDriverが使われます。
Skinny以外にはDBIをサポートしています。
DriverもHookやPlugin同様、好きに書く事ができますので、DBICが使いたい人、CDBIを使いたい人、Data::Modelを使いたい人など色々有ると思いますので
好きに書いてください:)
書いたら教えてもらえるととてもうれしいです:)
好きに書いたDriverは
Qudo->new( driver_class => 'Your::Driver', databases => [ +{ dsn => 'dbi:SQLite:/tmp/qudo.db', username => '', password => '', } ], );
driver_classに設定することで使う事ができます。
To install Qudo, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Qudo
CPAN shell
perl -MCPAN -e shell install Qudo
For more information on module installation, please visit the detailed CPAN module installation guide.