Laravel之Queue的使用
Laravel隊列服務為各種不同的後台隊列提供統一的API,本文主要給大家介紹了Laravel中使用Queue的最基本操作教程,文中透過範例程式碼介紹的非常詳細。希望對大家有幫助。
前言
laravel中的隊列服務跟其他隊列服務也沒有什麼不同,都是最符合人類思維的最簡單、最普遍的流程:有一個地方存放隊列信息,一個PHP進程在運行時將任務寫入,另外一個PHP守護程序輪詢隊列信息,將達到執行要求的任務執行並刪除。由於PHP是url驅動的同步語言,本身是阻塞的,所以laravel提供一個守護程序工具來查詢並執行佇列資訊也就不足為奇了。
這兩天初次接觸 Laravel 的隊列,也是搞了好一會。 。 。一番折騰下來還是感慨對 Laravel 不得其門,文檔寫的相對簡單和概括,看源碼又有些力不從心(不過看源碼慢慢調試驗證還是最可靠的)。
下面是我的一個簡單Demo,僅僅使用了隊列的最基本操作,偏高級的操作需要再去好好時間一番:)
和我一樣入門Laravel 的隊列有些困難的同學可以交流一下。
配置
#新增Redis 套件
在composer.json中require 部分加入"predis/predis": "~1.0",,然後composer up 更新一下即可。
database.php
在database.php 設定檔中對redis 資料庫部分進行配置,預設有一個default 連接,就用這個好了: )
根據這個預設連線中所需的設定項,編輯.env 設定文件,將其中的REDIS_HOST、REDIS_PASSWORD、REDIS_PORT 填入自己伺服器中Redis 的對應值。
queue.php
首先需要去 .env 設定 QUEUE_DRIVER,因為現在打算用 Redis,所以要設定成 redis。
接著配置 queue.php 裡 connections 部分的 redis 連接,其中 connection 對應的值就是 database.php 中 redis 的那個 default 連接。
任務類別
接下來就是寫實際的操作類別了,Laravel 提供了artisan 指令簡化建立任務類別:
php artisan make:job Demo
在app 目錄下會產生Jobs 目錄,裡面已經有Demo.php 任務類別了。
Lumen 可沒有這個 artisan 指令,不過也很方便,預設會有一個 ExampleJob.php 已經寫好了,拷貝一份改個名字即可。
先寫個簡單的日誌輸出測試一下好了,在handle 方法中:
Log::info('Hello, queue');
#發放任務
Demo::dispatch();
dispatch(new Demo);
##開啟佇列
順利的話,這是最後一步了。在命令列中執行:
php artisan queue:listen --queue=default
它會監聽佇列,並且輸出簡單的執行情況,例如:
[2017-11-07 02:12:47] Processing: App\Jobs\Demo [2017-11-07 02:12:47] Processed: App\Jobs\Demo
沒啥問題後就可以讓這個佇列腳本執行在後台:
php artisan queue:work --daemon --quiet --queue=default 1>> /dev/null 2>&1
推到佇列中時,一般會有傳參的需求,那這裡怎麼傳呢?
參數傳遞
傳入
在入口函數中傳入參數方式如下:
Laravel 中使用以下方式:
$param = 'Stephen'; Demo::dispatch($param);
Lumen 中使用以下方式:
$param = 'Stephen'; dispatch(new Demo($param));
在任務類別中接收參數方式如下:
protected $param; /** * Create a new job instance. * * @return void */ public function __construct($param) { $this->param = $param; } /** * Execute the job. * * @return void */ public function handle() { Log::info('Hello, ' . $this->param); }
初次嘗試到此為止,還有許多高階用法,例如延遲分發、錯誤處理、優先順序、失敗處理等,後續會繼續寫:)
多隊列
這是一個必然需要考慮到的問題,我不可能將所有任務都放在一個叫default 的隊列中,這樣不容易對隊列進行管理。
要指定不同的隊列,非常簡單,在dispatch() 後緊接著跟上onQueue() 方法即可:
Demo::dispatch()->onQueue('emails');
不對啊,我好像沒有定義過這個叫emails 的queue。嗯,自然需要做一點改動,在queue.php 設定檔中的redis 設定queue 從default 改為{default},而這樣做的效果就是佇列的名稱可以從執行的時候動態拿到,而不是寫死的。
如果使用 Lumen 框架,那麼直接這麼寫會報錯:Call to a member function onQueue() on string。
原因在於 Lumen 的 Job 基底類別中並沒有使用 Illuminate\Foundation\Bus\Dispatchable 這個 trait,而是直接使用 Illuminate\Bus\Queueable 中的 onQueue() 方法。
那麼現在就很清楚了,我們的 Job 類別使用了 Illuminate\Bus\Queueable 這個 trait,所以需要在 Job 類別上呼叫這個 onQueue() 方法。
$job = new XXXJob(); dispatch($job->onQueue('queue-name'));
當我們在開啟佇列的時候:
php artisan queue:work --queue=emails
这里指定的队列名 emails 和 dispatch 时指定的队列名保持一致即可。
相关推荐:
以上是Laravel之Queue的使用的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

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

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

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

Dreamweaver CS6
視覺化網頁開發工具

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

熱門話題

Laravel9和CodeIgniter4的最新版本提供了更新的功能和改進。 Laravel9採用MVC架構,提供資料庫遷移、驗證及模板引擎等功能。 CodeIgniter4採用HMVC架構,提供路由、ORM和快取。在性能方面,Laravel9的基於服務提供者設計模式和CodeIgniter4的輕量級框架使其具有出色的性能。在實際應用中,Laravel9適用於需要靈活性和強大功能的複雜項目,而CodeIgniter4適用於快速開發和小型應用程式。

比較Laravel和CodeIgniter的資料處理能力:ORM:Laravel使用EloquentORM,提供類別物件關係映射,而CodeIgniter使用ActiveRecord,將資料庫模型表示為PHP類別的子類別。查詢建構器:Laravel具有靈活的鍊式查詢API,而CodeIgniter的查詢建構器更簡單,基於陣列。資料驗證:Laravel提供了一個Validator類,支援自訂驗證規則,而CodeIgniter的驗證功能內建較少,需要手動編碼自訂規則。實戰案例:用戶註冊範例展示了Lar

對於初學者來說,CodeIgniter的學習曲線更平緩,功能較少,但涵蓋了基本需求。 Laravel提供了更廣泛的功能集,但學習曲線稍陡。在性能方面,Laravel和CodeIgniter都表現出色。 Laravel有更廣泛的文件和活躍的社群支持,而CodeIgniter更簡單、輕量級,具有強大的安全功能。在建立部落格應用程式的實戰案例中,Laravel的EloquentORM簡化了資料操作,而CodeIgniter需要更多的手動配置。

在選擇大型專案框架時,Laravel和CodeIgniter各有優勢。 Laravel針對企業級應用程式而設計,提供模組化設計、相依性注入和強大的功能集。 CodeIgniter是一款輕量級框架,更適合小型到中型項目,強調速度和易用性。對於具有複雜需求和大量用戶的大型項目,Laravel的強大功能和可擴展性更為合適。而對於簡單專案或資源有限的情況下,CodeIgniter的輕量級和快速開發能力則較為理想。

BitgetLaunchpool是一個為所有加密貨幣愛好者而設計的動態平台。 BitgetLaunchpool以其獨特的產品脫穎而出。在這裡,您可以質押您的代幣來解鎖更多獎勵,包括空投、高額回報,以及專屬早期參與者的豐厚獎金池。什麼是BitgetLaunchpool? BitgetLaunchpool是一個加密貨幣平台,可以透過使用者友善的條款和條件來質押和賺取代幣。透過在Launchpool中投入BGB或其他代幣,用戶有機會獲得免費空投、收益和參與豐厚的獎金池。質押資產的收益在T+1小時內計算,獎勵按

Laravel - Artisan 指令 - Laravel 5.7 提供了處理和測試新指令的新方法。它包括測試 artisan 命令的新功能,下面提到了演示?

對於小型項目,Laravel適用於大型項目,需要強大的功能和安全性。 CodeIgniter適用於非常小的項目,需要輕量級和易用性。

比較了Laravel的Blade和CodeIgniter的Twig模板引擎,根據專案需求和個人偏好進行選擇:Blade基於MVC語法,鼓勵良好程式碼組織和模板繼承。 Twig是第三方函式庫,提供靈活語法、強大過濾器、擴充支援和安全沙箱。
