Laravel database隊列使用

https://laravelacademy.org/post/19553.html

1.修改ENV文件 設置隊列使用database
QUEUE_CONNECTION=database
2.創(chuàng)建隊列所需要的數(shù)據(jù)庫表(表的名稱是根據(jù)config/queue.php文件的設置來的,默認為jobs)
> php artisan queue:table//生成遷移文件
> php artisan migrate//執(zhí)行遷移文件
3.創(chuàng)建一個隊列任務(此例為Sendemail)
> php artisan make:job Sendemail
4.定義隊列任務(此例我們寫入一個Log日志,
是不是很意外?名字叫sendemail,干的是寫入日志的活..)
//sendemail.php

public function handle()
    {
        Log::alert('隊列測試');
    }

5.控制器中定義一個方法調(diào)用隊列
如果在模型中使用需要use Illuminate\Foundation\Bus\DispatchesJobs;
//controller

public function queue()
    {
        Sendemail::dispatch();
    }

此時訪問這個方法可以在數(shù)據(jù)表 jobs中看到隊列已經(jīng)創(chuàng)建,此時隊列是沒有執(zhí)行的
6.運行隊列監(jiān)聽器執(zhí)行隊列
> php artisan queue:listen
此時收到隊列執(zhí)行完成的提示,在App/storage/logs/下面找到今天的日志文件,并查看可以找到下列內(nèi)容,這就是隊列執(zhí)行的工作
[2019-07-15 03:09:47] local.ALERT: 隊列測試

失敗隊列處理

1.創(chuàng)建失敗表的遷移文件和執(zhí)行遷移文件
> php artisan queue:failed-table
> php artisan migrate
2.我們修改控制器方法人為的制造一個錯誤
為隊列設置重試次數(shù),這里為3次.
> php artisan queue:work --tries=3
也可以在隊列文件中定義重試次數(shù)[優(yōu)先級高于命令行]
public $tries=5;
//定義隊列超時時間,單位為秒.
public $timeout = 120;
//隊列分類名稱
public $queue='mail';
執(zhí)行監(jiān)聽> php artisan queue:listen
此時執(zhí)行失敗的隊列已經(jīng)自動記錄在表failed_jobs里面
查看失敗的隊列
> php artisan queue:failed
此時會列出失敗的隊列列表
重新開始執(zhí)行隊列命令> php artisan queue:retry 1表示重新執(zhí)行ID為1的隊列任務
如果要執(zhí)行所有失敗的隊列> php artisan queue:retry all
刪除失敗的隊列命令> php artisan queue:forget 1
刪除所有失敗隊列命令> php artisan queue:flush

我們可以定義一下隊列失敗的動作

//Sendemail.php

public function failed()
使用`failed`方法定義隊列失敗的處理方法,比如發(fā)送短信或者郵件給管理員.
    {
        Log::alert('隊列失敗了,通知一下');
    }

任務類結構隊列


  • 這是一種簡單的隊列用法

在控制器類名后面加上implements ShouldQueue

use Illuminate\Contracts\Queue\ShouldQueue;
class TableController extends Controller implements ShouldQueue
{
//隊列自動重試次數(shù)
public $tries=5;
//隊列分類名稱
public $queue='mail';

public function sendemail()
    {
        $data = ['email' => '66666666@qq.com'];
        Mail::to($data)->queue(new Welcome('管理員'));
    }

}

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容