Laravel Jobs

liaosp發表於2020-05-08

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 協議》,轉載必須註明作者和本文連結

相關文章