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テーブルにジョブ登録され、非同期にジョブが実行されるはずです。