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が数秒間隔で出力されるはず。

環境

Linux CentOS 5.7
Perl 5.8.8
Gearman::Server 1.11