ジョブキューサーバー。
Gearmand と同じような機能で、設定が簡単な印象。
クライアントライブラリは、様々な言語に用意されており、困ることはない。Node.jsにも用意されている。
AWS Elastic Beanstalk とは関係ありません!
http://kr.github.com/beanstalkd/
キューはメモリ上に貯まるが、binlogの設定をすれば、再起動時もキューがクリアされない。
設定ファイル
# vi /etc/sysconfig/beanstalkd
再起動時もキューがクリアされなくなる
BEANSTALKD_BINLOG_DIR=/var/lib/beanstalkd/binlog
実際に利用した例
iPhone へプッシュ通知を行う時に利用した。
クライアントライブラリは、今回 PHPの pheanstalk を使用した。
pheanstalkでは、複数のホスト、ポートを指定することができないようだが、
ライブラリによっては複数サーバーを指定できるので、処理を分散させることもできるようだ。
beanstalkd自体は、1つ起動。ワーカーを複数起動させる。daemontools を利用し、ワーカーを起動。プロセスが何らかの理由で終了した場合、daemontoolsによって再起動されるようにした。
サンプル
下はかなり簡易にしたコード。実際には例外処理や、ログ保存を行った。
Tubeという設定で、取得するデータをフィルタすることができるので、namespaceとして利用してみた。
enqueue
$talk = new Pheanstalk ($host, $port); $talk->useTube ($namespace); $text = serialize ($data); $talk->put ($text);
dequeue
$talk = new Pheanstalk ($host, $port); $talk->watch ($namespace); while (true) { $job = $talk->reserve(); $text = $job->getData(); $data = unserialize ($text); $talk->delete ($job); }