-
-
27 Feb 2016 15:05:29 UTC
- Distribution: Qudo
- Source (raw)
- Browse (raw)
- Changes
- Homepage
- How to Contribute
- Repository
- Issues
- Testers (173 / 1 / 0)
- Kwalitee
Bus factor: 1- License: perl_5
- Activity
24 month- Tools
- Download (432.23KB)
- MetaCPAN Explorer
- Permissions
- Subscribe to distribution
- Permalinks
- This version
- Latest version
and 15 contributors- Atsushi Kobayashi <nekokak _at_ gmail dot com>
-
小林 篤
-
Kobayashi
-
User
-
tokuhirom
-
Masaru Hoshino
-
makamaka
-
Keiji, Yoshimi
-
Atsushi Kobayashi
-
memememomo
-
ktat
-
dokechin
-
Tim Retout
-
Daniel Green
-
Jiro Nishiguchi
NAME
Qudo::Manual::JA::Function - Qudo's major function document lang:ja
DESCRIPTION
ここではQudoの主な機能について解説していきます。
Hook
Qudoでは各所にHookポイントがあるので、Hookポイントをつかって各種処理を行う事ができます。
Job を enqueueする時に引数をシリアライズしたりなどです。
たとえば、enqueueする引数の情報をJSONでシリアライズしたい場合は
my $client = Qudo->new(... , default_hooks => ["Qudo::Hook::Serialize::JSON"]); $client->enqueue('Test::Worker', { arg => {name => 'nekokak'}, uniqkey => 'uniq'});
このようにHookモジュールをnewの引数に渡す事で設定でき、 設定した引数がJSONでシリアライズされて保存されます。
Hookは利用者が好きに書く事ができるので、Qudoが持っていない機能も簡単に書く事ができます。
Hook Pointとしては以下があります
pre_enqueue post_enqueue serialize deserialize pre_work post_work
pre_enqueue
jobをdatabaseにenqueueする前に呼び出されます。
post_enqueue
jobがdatabaseにenqueueされた後に呼び出されます。
pre_work
jobの実際の処理が行われる前に呼び出されます。
post_work
jobの実際の処理が行われた後に呼び出されます。
serialize
jobをdatabaseにenqueueする直前、pre_enqueueの呼び出し直後によびだされます。
deserialize
jobの実際の処理が行われる直前、pre_workの呼び出し直後によびだされます。
Plugin
Qudoでは好きにPluginを書く事ができます。
たとえばworkerで使うdebug print用のPluginを用意したとします。
package Your::Plugin::DebugPrint; use strict; use warnings; use base 'Qudo::Plugin'; sub plugin_name { 'debug' } sub load { my $class = shift; $class->register( sub { my $val = shift; print STDOUT $val; } ); }
用意したPluginをloadするには
$worker->register_plugins(qw/Your::Plugin::DebugPrint/);
このようにregister_pluginsメソッドにロードさせたいモジュールのパッケージ名を指定します。
プラグインの呼び出し方は
package Worker::Test; use base 'Qudo::Worker'; sub work { my ($self, $job) = @_; $job->manager->plugin->{debug}->('debug message in Worker::Test::work'); }
このようにします。
Your::Plugin::DebugPrintで指定したplugin_nameの値がハッシュのキーになっているので、 そのキー経由でプラグインを呼び出す事ができます。
これまた再利用できるPluginを書いたのであれば教えてください:)
Error Handling
jobの処理がcompleteしなかった場合、exception_logテーブルにエラー情報が書き込まれます。 TheSchwartzの場合でもjobの処理が失敗した場合、errorテーブルにエラー情報が書き込まれますが、 errorテーブルに一定数以上のレコードが溜まらないように、適宜deleteされます。 Qudoの場合はexception_logに書き込まれた情報はQudo自体が消す事は有りません。 これは、知らないエラーが発生したまま情報が消えてしまう事を嫌った為です。
exception_list
Qudoではexception_logの情報を取り出すためのメソッドを用意しています。
$client->exception_list;
exception_listメソッドをつかえば、発生した例外情報を参照する事ができます。
発生した例外を確認したのち、もう一度リトライさせたい場合があるとおもいます。 その場合は以下のようにすると良いでしょう。
my $exceptions = $client->exception_list $client->enqueue_from_failed_job($exceptions->[0]);
こうするだけで、例外が発生した時のJobの情報を元にJobが再登録されます。
再登録した例外情報にはretriedが1になり同じ例外情報からは再度Jobが登録できなくなります。
Job Handling
Jobの状態を確認するために以下のメソッド群を用意しています。
job_count
QudoではJobが溜まりすぎていないかを簡単に調べる事ができます。
$client->job_count([qw/Your::Worker::Mail/]);
job_countメソッドに調べたいワーカー名を指定すると、処理されていないJobの件数を取得する事ができます。
job_status_list
job_status_listメソッドを使うと、処理されたJobの情報を確認する事が出来ます。 job_status_listメソッドを使うには、
package Worker::Test; use base 'Qudo::Worker'; sub set_job_status { 1 } sub work { my ($self, $job) = @_; $job->completed(); }
このように、set_job_statusに1を設定してください。 デフォルトではset_job_statusは0に設定されているので、 Jobの情報はロギングされません。
Module Install Instructions
To install Qudo, copy and paste the appropriate command in to your terminal.
cpanm Qudo
perl -MCPAN -e shell install Qudo
For more information on module installation, please visit the detailed CPAN module installation guide.