實例講解Laravel隊列的簡單使用
這篇文章為大家帶來了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
#4、Supervisor 設定
安裝Supervisor
##Supervisor 是一個Linux 作業系統上的進程監控軟體,它會在queue:listen 或queue:work 命令發生失敗後自動重新啟動它們。在 Ubuntu 安裝 Supervisor,可以用以下指令:sudo apt-get install 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
啟動Supervisor
#當這個設定檔被建立後,你需要更新Supervisor 的配置,並用以下指令來啟動該進程:sudo supervisorctl reread sudo supervisorctl update sudo supervisorctl start laravel-worker:*
php artisan queue:failed-table php artisan migrate
php artisan queue:work redis --tries=3
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影片教學】
以上是實例講解Laravel隊列的簡單使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在dcatadmin(laravel-admin)中如何實現自定義點擊添加數據的表格功能在使用dcat...

Laravel郵件發送失敗時的退信代碼獲取方法在使用Laravel開發應用時,經常會遇到需要發送驗證碼的情況。而在實�...

Laravel框架中Redis連接的共享與select方法的影響在使用Laravel框架和Redis時,開發者可能會遇到一個問題:通過配置...

在Laravel多租戶擴展包stancl/tenancy中自定義租戶數據庫連接使用Laravel多租戶擴展包stancl/tenancy構建多租戶應用時,...

LaravelEloquent模型檢索:輕鬆獲取數據庫數據EloquentORM提供了簡潔易懂的方式來操作數據庫。本文將詳細介紹各種Eloquent模型檢索技巧,助您高效地從數據庫中獲取數據。 1.獲取所有記錄使用all()方法可以獲取數據庫表中的所有記錄:useApp\Models\Post;$posts=Post::all();這將返回一個集合(Collection)。您可以使用foreach循環或其他集合方法訪問數據:foreach($postsas$post){echo$post->

在Laravel6項目中如何檢查Redis連接的有效性是一個常見的問題,特別是在項目依賴於Redis進行業務處理時。以下是...

Laravel 是一款 PHP 框架,用於輕鬆構建 Web 應用程序。它提供一系列強大的功能,包括:安裝: 使用 Composer 全局安裝 Laravel CLI,並在項目目錄中創建應用程序。路由: 在 routes/web.php 中定義 URL 和處理函數之間的關係。視圖: 在 resources/views 中創建視圖以呈現應用程序的界面。數據庫集成: 提供與 MySQL 等數據庫的開箱即用集成,並使用遷移來創建和修改表。模型和控制器: 模型表示數據庫實體,控制器處理 HTTP 請求。

Laravel數據庫遷移過程中出現類重複定義問題在使用Laravel框架進行數據庫遷移時,開發者可能會遇到“類已使用�...
