搜尋
首頁php框架Laravel實例講解Laravel隊列的簡單使用

這篇文章為大家帶來了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

{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影片教學

以上是實例講解Laravel隊列的簡單使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:CSDN。如有侵權,請聯絡admin@php.cn刪除
laravel框架技巧分享laravel框架技巧分享Apr 18, 2025 pm 01:12 PM

在這個技術不斷進步的時代,掌握先進的框架對於現代程序員至關重要。本文將通過分享 Laravel 框架中鮮為人知的技巧,幫助你提升開發技能。 Laravel 以其優雅的語法和廣泛的功能而聞名,本文將深入探討其強大的特性,提供實用技巧和竅門,幫助你打造高效且維護性高的 Web 應用程序。

laravel和thinkphp的區別laravel和thinkphp的區別Apr 18, 2025 pm 01:09 PM

Laravel 和 ThinkPHP 都是流行的 PHP 框架,在開發中各有優缺點。本文將深入比較這兩者,重點介紹它們的架構、特性和性能差異,以幫助開發者根據其特定項目需求做出明智的選擇。

laravel用戶登錄功能一覽laravel用戶登錄功能一覽Apr 18, 2025 pm 01:06 PM

在 Laravel 中構建用戶登錄功能是一個至關重要的任務,本文將提供一個全面的概述,涵蓋從用戶註冊到登錄驗證的每個關鍵步驟。我們將深入探討 Laravel 的內置驗證功能的強大功能,並指導您自定義和擴展登錄過程以滿足特定需求。通過遵循這些一步一步的說明,您可以創建安全可靠的登錄系統,為您的 Laravel 應用程序的用戶提供無縫的訪問體驗。

laravel有哪些版本 laravel新手版本選擇方法laravel有哪些版本 laravel新手版本選擇方法Apr 18, 2025 pm 01:03 PM

在面向初学者的 Laravel 框架版本选择指南中,本文深入探討了 Laravel 的版本差異,旨在協助初學者在眾多版本之間做出明智的選擇。我們將重點介紹每個版本的關鍵特徵、比較它們的優缺點,並提供有用的建議,幫助新手根據他們的技能水準和項目需求挑選最合適的 Laravel 版本。對於初學者來說,選擇一個合適的 Laravel 版本至關重要,因為它可以顯著影響他們的學習曲線和整體開發體驗。

laravel怎麼查看版本號 laravel查看版本號方法laravel怎麼查看版本號 laravel查看版本號方法Apr 18, 2025 pm 01:00 PM

Laravel框架內置了多種方法來方便地查看其版本號,滿足開發者的不同需求。本文將探討這些方法,包括使用Composer命令行工具、訪問.env文件或通過PHP代碼獲取版本信息。這些方法對於維護和管理Laravel應用程序的版本控制至關重要。

php框架laravel使用最新方法php框架laravel使用最新方法Apr 18, 2025 pm 12:57 PM

Laravel 是一個基於 PHP 的流行 Web 應用程序框架,因其優雅的語法和強大的功能而廣受開發人員歡迎。它的最新版本引入了許多改進和新功能,旨在提升開發體驗和應用程序性能。本文將深入探討 Laravel 的最新方法,重點介紹如何利用這些更新來構建更強大、更高效的 Web 應用程序。

laravel框架安裝方法laravel框架安裝方法Apr 18, 2025 pm 12:54 PM

文章摘要:本文提供了詳細分步說明,指導讀者如何輕鬆安裝 Laravel 框架。 Laravel 是一個功能強大的 PHP 框架,它 упростил 和加快了 web 應用程序的開發過程。本教程涵蓋了從系統要求到配置數據庫和設置路由等各個方面的安裝過程。通過遵循這些步驟,讀者可以快速高效地為他們的 Laravel 項目打下堅實的基礎。

Laravel如何學習 怎麼免費學習LaravelLaravel如何學習 怎麼免費學習LaravelApr 18, 2025 pm 12:51 PM

想要學習 Laravel 框架,但苦於沒有資源或經濟壓力?本文為你提供了免費學習 Laravel 的途徑,教你如何利用網絡平台、文檔和社區論壇等資源,從入門到掌握,為你的 PHP 開發之旅奠定堅實基礎。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3 Mac版

SublimeText3 Mac版

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

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器