GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
Qudo::Manual::JA::Functions(3) User Contributed Perl Documentation Qudo::Manual::JA::Functions(3)

Qudo::Manual::JA::Function - Qudo's major function document lang:ja

ここではQudoの主な機能について解説していきます。

Qudoでは各所にHookポイントがあるので、Hookポイントをつかって各種処理を行う事ができます。

Job を enqueueする時に引数をシリアライズしたりなどです。

たとえば、enqueueする引数の情報をJSONでシリアライズしたい場合は

    my $client = Qudo->new(...);
    $client->register_hooks('Qudo::Hook::Serialize::JSON');
    $client->enqueue('Test::Worker', { arg => {name => 'nekokak'}, uniqkey => 'uniq'});

このようにHookモジュールをregister_hooksに渡す事で設定でき、 設定した引数がJSONでシリアライズされて保存されます。

Hookは利用者が好きに書く事ができるので、Qudoが持っていない機能も簡単に書く事ができます。

Hook Pointとしては以下があります

    pre_enqueue
    post_enqueue
    serialize
    deserialize
    pre_work
    post_work

jobをdatabaseにenqueueする前に呼び出されます。

jobがdatabaseにenqueueされた後に呼び出されます。

jobの実際の処理が行われる前に呼び出されます。

jobの実際の処理が行われた後に呼び出されます。

jobをdatabaseにenqueueする直前、pre_enqueueの呼び出し直後によびだされます。

jobの実際の処理が行われる直前、pre_workの呼び出し直後によびだされます。

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を書いたのであれば教えてください:)

jobの処理がcompleteしなかった場合、exception_logテーブルにエラー情報が書き込まれます。 TheSchwartzの場合でもjobの処理が失敗した場合、errorテーブルにエラー情報が書き込まれますが、 errorテーブルに一定数以上のレコードが溜まらないように、適宜deleteされます。 Qudoの場合はexception_logに書き込まれた情報はQudo自体が消す事は有りません。 これは、知らないエラーが発生したまま情報が消えてしまう事を嫌った為です。

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の状態を確認するために以下のメソッド群を用意しています。

QudoではJobが溜まりすぎていないかを簡単に調べる事ができます。

    $client->job_count([qw/Your::Worker::Mail/]);

job_countメソッドに調べたいワーカー名を指定すると、処理されていないJobの件数を取得する事ができます。

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の情報はロギングされません。

2010-11-08 perl v5.32.1

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.