Laravel使ってみた (17) - Queue -

2013-07-26T00:00:00+00:00 beanstalk Laravel PHP

http://laravel.com/docs/queues のドキュメント読みなんですが、一部IronMQっていうのに依存する機能がある模様げで、そのIronMQを使ってないのでそこは(ry

でMQサーバー何使うのって所として、んまぁ手軽だしBeanstalkで良いんじゃないかって事で。

apt-get install beanstalkd

Ubuntuとかだったら提供されているっぽいのでサクッと入れられますって事で。でLaravel側はこっから

でLaravelのQueueを動かすには

  • beanstalkd等を起動
  • app/config/環境名/queue.phpを作成
  • artisan queue:listenを起動
  • Queue::pushを使う

な感じ

app/config/development/queue.phpを作成

とりあえず今回は環境名をdevelopmentにしておく。んでデフォルトはapp/config/queue.phpにある(はず)のでコピーして修正

<?php

return array(
    "default" => "beanstalkd",
    "connections" => array(
        "beanstalkd" => array(
            "driver" => "beanstalkd",
            "host"   => "localhost",
            "queue"  => "laravel",
        )
    )
);

んまぁdefaultとconnections.beanstalkd.queueの値を変えただけ

キューとして処理されるクラスを作成

Closure型でQueue::pushを指定する事も出来る模様

<?php

class HogeQueue {
    public function fire($job, $data) {
        $job->delete();
    }
}

デフォルトで動くメソッド名はfireな模様だけどQueue::pushの引数でルーティング同様な形式でメソッドを指定する事も出来るっぽい

又、ジョブキュー自体は自動的には消えない(はず)。$jobのdeleteメソッドを使う事で明示的にキューを削除する事が出来る。又、release(秒?)を使う事で遅延リトライ的な事も出来る模様

恐らくは$jobの型は使ってるMQによって変わるんだと。Beanstalkの場合にはIlluminate\Queue\Jobs\BeanstalkdJobになるかも。んまぁ使えるAPIとかは左のリンクを参照

あとは上記でも書いたように

artisan queue:listen

をする。ちなみに-timeoutでジョブのタイムアウト値。-envで環境名とかを指定したりも出来る模様。んで

Queue::push("HogeQueue", $id);

とかで使うっていう感じかと

Queueで処理されるクラスの単体テストとかはあとで追記する

追記1

書くの忘れてた。beanstalkdが入っててもPHP用のクライアントライブラリ入ってないといけないと思うのでだけど、ドキュメント的には

Beanstalkd: pda/pheanstalk

って書かれているので、composer.json辺りに追加してcomposer updateすりゃいいかと

Laravel使ってみた (18) - Security(ユーザー認証) - Laravel使ってみた (16) - Events -