Laravel使ってみた (17) - Queue -
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すりゃいいかと