日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

本篇文章給大家帶來了laravel的相關知識,其中主要介紹了Laravel隊列、在什么情況下使用隊列、配置隊列儲存等相關問題,希望對大家有幫助。


實例講解Laravel隊列的簡單使用


本文將介紹如何在 Laravel 中使用隊列,以及了解了為什么使用隊列

什么情況使用隊列?

耗時的,比如上傳一個文件后進行一些格式的轉化等。

需要保證送達率的,比如發送短信,因為要調用別人的 api,總會有幾率失敗,那么為了保證送達,重試就必不可少了。

記錄使用過程:

一、配置隊列存儲

隊列配置文件存放在 config/queue.php,默認為 sync 同步處理,這里可以選擇 redis,database 等,使用方法如下。

數據庫

創建數據表存儲任務,執行完 artisan 命令后運行數據遷移

php artisan queue:table
php artisan migrate

Redis

為了使用 redis 隊列驅動,你需要在你的配置文件 config/database.php 中配置Redis的數據庫連接。

如果你的 Redis 隊列連接使用的是 Redis 集群,你的隊列名稱必須包含 key hash tag。這是為了確保所有的 Redis 鍵對于一個給定的隊列都置于同一哈希中:

'redis' => [
    'driver' => 'redis',
    'connection' => 'default',
    'queue' => 'default',
    'retry_after' => 90,
],

二、創建任務類

隊列的任務類在 app/Jobs/ 目錄下

php artisan make:job SaveBusLine

修改文件如下:

namespace App\Jobs;
use App\Http\Repository\BusRepository;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
class SaveBusLine implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    /**
    * 任務最大嘗試次數。
    *
    * @var int
    */
    public $tries = 3;
    /**
     * 任務運行的超時時間。
     *
     * @var int
     */
    public $timeout = 60;
    private $datum;
    /**
     * Create a new job instance.
     * @param array|object $datum
     *
     * @return void
     */
    public function __construct($datum)
    {
        $this->datum = $datum;
    }
    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        BusRepository::getInstent()->updateBusLine($this->datum);
    }
}

在控制器或倉庫中調用隊列方法:

use App\Jobs\SaveBusLine;
use Carbon\Carbon;
/***************** 隊列操作 start *******************/
SaveBusLine::dispatch($arrayData)->delay(Carbon::now()->addMinute(1));
/***************** 隊列操作 end *******************/

三、啟動隊列任務

php artisan queue:work

四、Supervisor 配置

安裝 Supervisor

Supervisor 是一個 Linux 操作系統上的進程監控軟件,它會在 queue:listen 或 queue:work 命令發生失敗后自動重啟它們。在 Ubuntu 安裝 Supervisor,可以用以下命令:

sudo apt-get install supervisor

{tip} 如果自己手動配置 Supervisor 聽起來有點難以應付,可以考慮使用 Laravel Forge,它能給你的 Laravel 項目自動安裝與配置 Supervisor。


配置 Supervisor

Supervisor 的配置文件一般是放在 /etc/supervisor/conf.d 目錄下。在這個目錄中你可以創建任意數量的配置文件來要求 Supervisor 怎樣監控你的進程。例如我們創建一個 laravel-worker.conf 來啟動與監控一個 queue:work 進程:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php ~/laravel/artisan queue:work redis --sleep=3 --tries=3
autostart=true
autorestart=true
user=lisgroup
numprocs=8
redirect_stderr=true
stdout_logfile=/home/lisgroup/logs/worker.log

這個例子里的 numprocs 命令會要求 Supervisor 運行并監控 8 個 queue:work 進程,并且在它們運行失敗后重新啟動。當然,你必須更改 command 命令的 queue:work redis ,以顯示你所選擇的隊列驅動。還需要修改執行的用戶 user=XXX


啟動 Supervisor

當這個配置文件被創建后,你需要更新 Supervisor 的配置,并用以下命令來啟動該進程:

sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*

更多有關 Supervisor 的設置與使用,請參考 Supervisor 官方文檔。


五、處理失敗的任務

有時候你隊列中的任務會失敗。不要擔心,本來事情就不會一帆風順。Laravel 內置了一個方便的方式來指定任務重試的最大次數。當任務超出這個重試次數后,它就會被插入到 failed_jobs 數據表里面。要創建 failed_jobs 表的遷移文件,你可以用 queue:failed-table 命令,接著使用 migrate Artisan 命令生成 failed_jobs 表:

php artisan queue:failed-table
php artisan migrate

然后運行隊列處理器,在調用 queue worker,命令時你應該通過 --tries 參數指定任務的最大重試次數。如果不指定,任務就會永久重試:

php artisan queue:work redis --tries=3


六、清除失敗任務

你可以在任務類里直接定義 failed 方法,它能在任務失敗時運行任務的清除邏輯。這個地方用來發一條警告給用戶或者重置任務執行的操作等再好不過了。導致任務失敗的異常信息會被傳遞到 failed 方法:

namespace App\Jobs;
use Exception;
use App\Podcast;
use App\AudioProcessor;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
class ProcessPodcast implements ShouldQueue
{
    use InteractsWithQueue, Queueable, SerializesModels;
    protected $podcast;
    /**
     * 創建一個新的任務實例。
     *
     * @param Podcast $podcast
     * @return void
     */
    public function __construct(Podcast $podcast)
    {
        $this->podcast = $podcast;
    }
    /**
     * 執行任務。
     *
     * @param AudioProcessor $processor
     * @return void
     */
    public function handle(AudioProcessor $processor)
    {
        // 處理上傳播客...
    }
     
    /**
     * 要處理的失敗任務。
     *
     * @param Exception $exception
     * @return void
     */
    public function failed(Exception $exception)
    {
        // 給用戶發送失敗通知,等等...
    }
}


分享到:
標簽:實例講解 Laravel隊列的使用
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定