FuelPHPで使える非同期処理(JobQueue)のパッケージを作ってみた

FuelPHPで使える非同期処理(JobQueue)のパッケージを作ってみたこんにちは。ビンゴ細羽です。

FuelPHPで非同期処理(JobQueue)を実現するパッケージがこれといって見当たらなかったので、fuel-jobqueueパッケージを作ってみました。

まだテストが全く書けていなかったり、エラー処理が怪しかったり、Loggingが不十分だったりしますが、
とりあえず使える形にはなったので公開しておきます。

仕組み

Queueのバックエンドとして、今回はbeanstalkdを利用しました。

なお、バックエンドに応じたConnector/Queue/Jobインターフェースの実装を追加することで、
他のバックエンドにも対応できる(はず)なので、今後時間があればAmazon SQSやphp-resqueの実装を追加していきたい。

基本的な作りとしては、Laravel PHP Queueを参考にしました。

使い方

READMEの翻訳版です。。

1. composer

composerに対応しています。

 

2. Packageの読み込み設定

fuel/app/config/config.php でパッケージの読み込み設定を追加します。

※もちろん、コード内での動的な読み込みもOKです。

3. 設定 (jobqueue.php)

デフォルトの設定ファイルをappにコピーします。

もしくは、FUEL_ENVに応じた設定として保存してもOKです。

基本的にデフォルトの設定で良いと思いますが、beanstalkd関連で変更したい項目があれば変更します。

4. beanstalkdのインストール・起動

Queueのバックエンドとして利用するbeanstalkdをインストールします。

5. Jobクラスの実装

非同期で実行したい処理を記述したJobクラスを実装します。

ポイントはfire()メソッドの実装です。

6. Controllerの実装

実装したMyjobを、任意のControllerで生成してQueueに登録する処理を実装してみます。

7. Workerの起動

以上で準備は完了です。
Queueを監視するWorkerプロセスを起動します。

先ほど実装したControllerのactionを呼び出してみて、Myjobが実行されるかログを見て確認してみましょう。

番外編: Workerのデーモン化

手順7では、Workerがフォアグラウンドで起動するので、バックグラウンドで起動するためにデーモン化する方法。

pearでSystem_Daemonをインストールします。

次に、以下のコードをFUEL_ROOT 直下にdaemon.phpとして配置します。

以下のコマンドでデーモンを起動します。


この記事はあなたの役に立ちましたか?他の人達にも役立ちそうでしたら、上のボタンより共有をお願いします。共有して頂けたら今後提供する記事の参考やモチベーションアップにつながります。