|
NAMEQudo::Manual::JA::Tutorial - Qudo's sample code document lang:ja まず始めにQudoを使うにはデータをストアするためにQudo用のデータベースを設定する必要があります。 現在対応しているRDBMSは「MySQL」,「SQLite」,「PostgreSQL」です。 スキーマのsetupでは付属のqudoコマンドで行ってください clientQudoで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が処理してくれます。 workerqueueingされた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に処理が移譲されます。 DriverQudoでは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に設定することで使う事ができます。
|