laravel 佇列支援:
"sync", "database", "beanstalkd", "sqs", "redis", "null"
等。。。
先用database測試
修改.env
QUEUE_CONNECTION=database
配置資料庫模式的環境,原理儲存在資料庫,執行完成之後就刪除了
php artisan queue:table
php artisan migrate
生成上圖展示的資料庫jobs
建立一個job
php artisan make:job test
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
class test implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $data;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($data=[])
{
$this->data = $data;
$this->delay(6);//6秒後執行
//
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
var_dump($this->data);
}
}
兩種方式:
新增一個job到佇列中
dispatch(new \App\Jobs\test('我是佇列的引數'));
test::dispatch('我是佇列的引數');
上面就能跑通了,但是有時候會處理異常的情況
php artisan queue:failed-table
php artisan migrate
啟動的時候有嘗試的值,為如果失敗了,會再次執行
php artisan queue:work --sleep=3 --tries=3
laravel框架中queue:listen 和 queue:work –daemon 的區別
三秒後再次嘗試
如果不加tries 則會一直不斷的迴圈
發現了有錯誤,修改了bug ,想讓這個佇列再跑一次
這個id 為失敗的id
php artisan queue:retry 1
如果想所有的錯誤都跑一遍則用all
php artisan queue:retry all
本作品採用《CC 協議》,轉載必須註明作者和本文連結