LaravelのQueueを利用する機会があったので、備忘録として残す。
Queueのdatabaseを使用した。
1. .envを変更する
[.env] QUEUE_CONNECTION=database
2. config/queue.phpを変更する
[config/queue.php] 'database' => [ 'driver' => 'database', 'table' => 'jobs', 'queue' => 'database', 'retry_after' => 90, ], ...省略... 'failed' => [ 'database' => env('DB_CONNECTION', 'mysql'), 'table' => 'failed_jobs', ],
3. jobsテーブルとfailed_jobsテーブルを生成
$ php artisan queue:table $ php artisan queue:failed-table $ php artisan migrate
4. ジョブクラスの作成
app/Jobsディレクトリに作成される
$ php artisan make:job {ジョブクラス名}
5. ジョブクラスの設定
class ジョブクラス名 implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; private $arg1; /** * 新しいジョブインスタンスの生成 * */ public function __construct($arg1) { // dispatchで指定された引数を受け取れる $this->arg1 = $arg1; } /** * ジョブの実行 * * @return void */ public function handle() { // 実行したい処理 } /** * 失敗したジョブの処理 * * @param \Exception $exception * @return void */ public function failed(\Exception $exception) { // 失敗時の処理 } }
6. コントローラからジョブ登録する設定
public function xxxxxx() { ジョブクラス名::dispatch( $arg1 ) ->onConnection('database') ->onQueue('database'); }
7. ジョブワーカーの起動
$ php artisan queue:work --queue=database
これでワーカーが起動されます。
起動した状態で、dispatchしたルートにアクセスするとjobsテーブルにジョブ登録され、非同期にジョブが実行されるはずです。