Gearman::Serverを使ってみたのでメモ
Perl製ジョブキューサーバーであるGearmanを、練習で使ってみました。下書き放置してたので、実際に使ってみたのは結構前ですが。
Perl製と書いたけど、今はC/C++実装に移っているらしく2011-07-25にバージョン0.24が出ている見たいです。Perl実装は最新がバージョン1.11ですが、リリース日は2010-01-17です。ただ、今までの環境で動いていたのがPerl製の方なのと、CentOS5系だとgearmanが依存するバージョンのライブラリがyumで入れられないらしいという事で、Perl実装のGearman::Server 1.11を入れています。
導入
$ sudo cpanm Gearman::Server
$ sudo cpanm Gearman::Client
$ sudo cpanm Gearman::Worker #依存関係の解決で既に入ってるかも
まぁ、これだけです。CPANを使う環境が整ってればですが。
テスト実行。サーバー側
$ /usr/bin/gearmand
とりあえずgearmandを起動します。参考にした環境ではdaemontoolsで落ちても起動しなおす様にしてたけど、とりあえずテストなので。
$ telnet localhost 7003 Trying 127.0.0.1... Connected to localhost (127.0.0.1). Escape character is '^]'. status . workers 6 127.0.0.1 - : . ^] telnet> q Connection closed.
別のシェルでgearmandが動いてることを確認します。当然ですがワーカーはありません。
テスト実行。クライアント側
$ git clone git://gist.github.com/1258690.git gearman-test
学習も兼ねて書いたワーカーと、起動するクライアントです。あんまり分かりやすくなけど、一応Gearmanが動くかどうかの確認には使えます。
$ perl gearman-test/worker.pl
ワーカーを起動します。
$ telnet localhost 7003 status sample_job_a 0 0 1 sample_job_b 0 0 1 . workers 6 127.0.0.1 ruktugmzfhstryqokxvnvbenaxfpub : sample_job_a sample_job_b 7 127.0.0.1 - : .
また別のシェルで確認します。1個のワーカーで2つのファンクションが登録されてます。
$ gearman-test/client.pl -job sample_job_a -m foo -m bar ---do_task----------------------------------- 1 $ gearman-test/client.pl -job sample_job_a -m foo -m bar -async 1 ---dispatch_background----------------------- localhost:7003//H:localhost:4
これで、perl gearman-test/worker.pl
した方のターミナルを見ると、fooとかbarが数秒間隔で出力されるはず。