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');
發放任務
現在寫個入口函數,推送任務到佇列。使用輔助函數dispatch():
Laravel 中使用以下方式:
Demo::dispatch();
Lumen 中使用以下方式:
#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中文網其他相關文章!

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于单点登录的相关问题,单点登录是指在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于Laravel的生命周期相关问题,Laravel 的生命周期从public\index.php开始,从public\index.php结束,希望对大家有帮助。

在laravel中,guard是一个用于用户认证的插件;guard的作用就是处理认证判断每一个请求,从数据库中读取数据和用户输入的对比,调用是否登录过或者允许通过的,并且Guard能非常灵活的构建一套自己的认证体系。

laravel中asset()方法的用法:1、用于引入静态文件,语法为“src="{{asset(‘需要引入的文件路径’)}}"”;2、用于给当前请求的scheme前端资源生成一个url,语法为“$url = asset('前端资源')”。

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于使用中间件记录用户请求日志的相关问题,包括了创建中间件、注册中间件、记录用户访问等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于laravel的相关知识,其中主要介绍了关于中间件的相关问题,包括了什么是中间件、自定义中间件等等,中间件为过滤进入应用的 HTTP 请求提供了一套便利的机制,下面一起来看一下,希望对大家有帮助。

在laravel中,fill方法是一个给Eloquent实例赋值属性的方法,该方法可以理解为用于过滤前端传输过来的与模型中对应的多余字段;当调用该方法时,会先去检测当前Model的状态,根据fillable数组的设置,Model会处于不同的状态。

laravel路由文件在“routes”目录里。Laravel中所有的路由文件定义在routes目录下,它里面的内容会自动被框架加载;该目录下默认有四个路由文件用于给不同的入口使用:web.php、api.php、console.php等。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

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

SublimeText3 Linux新版
SublimeText3 Linux最新版

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

WebStorm Mac版
好用的JavaScript開發工具

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!