今天小編給大家分享一下laravel隊列怎么使用的相關(guān)知識點,內(nèi)容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。
創(chuàng)新互聯(lián)建站從2013年成立,先為雙臺子等服務(wù)建站,雙臺子等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為雙臺子企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
在laravel中,隊列是一種操作受限制的線性表,它只允許在表的前端(隊頭)進行刪除操作,而在表的后端(隊尾)進行插入操作;通過隊列,開發(fā)者可以將耗時任務(wù)的處理往后推延,進而可以極大地提升web請求響應(yīng)速度。
1、什么是隊列
隊列是一種操作受限制的線性表,特殊之處在于它只允許在表的前端進行刪除操作,而在表的后端進行插入操作。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。
通過隊列,你可以將耗時任務(wù) (如發(fā)送電子郵件) 的處理往后推延。延遲這些耗時的任務(wù)可以極大地提升 web 請求響應(yīng)速度。
2、優(yōu)點
解耦:消息隊列可以對系統(tǒng)進行解耦,提高響應(yīng)速度,系統(tǒng)功能向內(nèi)聚合,對外開放;
異步:消息隊列可以對系統(tǒng)異步功能進行剝離,減少功能耦合,提供開發(fā)效率;
削峰:消息隊列可以削峰限流,確保下游消費者穩(wěn)定運行;
3、配置
隊列配置文件存儲在 config/queue.php 中。 在這個文件中,你可以找到框架中包含的每個隊列驅(qū)動程序的連接配置,其中包括數(shù)據(jù)庫,Beanstalkd,Amazon SQS,redis,和一個同步驅(qū)動程序(sync-供本地使用)。
這里使用 Redis 作為驅(qū)動,需要安裝好 Redis 以及 相關(guān)擴展。
4、任務(wù)
我們需要把一些東西放入隊列中,我們可以稱之為任務(wù)。Laravel 框架中創(chuàng)建任務(wù)給我們提供了以下命令:
php artisan make:job TestJob
TestJob.php
namespace App\Jobs;use Illuminate\Bus\Queueable;use Illuminate\Contracts\Queue\ShouldBeUnique;use Illuminate\Contracts\Queue\ShouldQueue;use Illuminate\Foundation\Bus\Dispatchable;use Illuminate\Queue\InteractsWithQueue;use Illuminate\Queue\SerializesModels;use Illuminate\Support\Facades\DB;use Symfony\Polyfill\Intl\Idn\Info;class TestJob implements ShouldQueue{ use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; /** * Create a new job instance. * * @return void */ public function __construct() { // } /** * Execute the job. * * @return void */ public function handle() {// \Log::info('hhh'); DB::connection('test') ->table('master') ->insert([ 'name'=>'小白', 'email'=>'123@qq.com' ]); }}
5、分發(fā)
一旦編寫了任務(wù)類,就可以使用任務(wù)本身的 dispatch 方法來分派它。傳遞給 dispatch 方法的參數(shù)將被傳遞給任務(wù)的構(gòu)造函數(shù)。
onQueue: 指定隊列;
onConnection: 指定連接;
delay: 延遲隊列;
dispatchNow: 同步調(diào)度;
#在路由中簡單調(diào)用 Route::get('queue',function(){ \App\Jobs\TestJob::dispatch(); // \App\Jobs\TestJob::dispatch()->onQueue('qq'); });
運行兩次該路由可以看到生成一個名為qq的隊列,后面我們對隊列進行消費
6、隊列消費
Laravel 有一個隊列處理器對新推入隊列的任務(wù)進行處理。通過 Artisan 命令 queue:work 來啟動隊列處理器。需要注意的是,一旦 queue:work 命令啟動,將一直保持運行,直到它被手動停止或你關(guān)閉你的終端:
php artisan queue:work
php artisan queue:work --once 添加參數(shù),消費指定隊列
#消費qq隊列 php artisan queue:work --queue=qq
可以看到數(shù)據(jù)庫中新增了兩條數(shù)據(jù),并且redis中數(shù)據(jù)被消費
我們再次執(zhí)行路由
7、事件隊列
隊列通常是用來處理延遲任務(wù),事件是業(yè)務(wù)邏輯處理。Laravel 中的 事件 觸發(fā)器分發(fā)至隊列中進行異步業(yè)務(wù)處理,那么這樣之后可以快速做出響應(yīng)而不用實時等待執(zhí)行結(jié)果之后才能給使用者做出提示消息。
如果需要把事件中的業(yè)務(wù)存放到隊列中去,我們并不需要重新進行隊列的分發(fā),直接在對應(yīng)的監(jiān)聽器中實現(xiàn) Illuminate\Contracts\Queue\ShouldQueue 接口即可。
創(chuàng)建事件和監(jiān)聽器
php artisan make:event TestEvent php artisan make:listener TestListener
在app\providers\EventServiceProvider.php中注冊
TestListener.php
namespace App\Listeners; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Support\Facades\DB; class TestListener implements ShouldQueue { /** * Create the event listener. * * @return void */ public function __construct() { // } /** * Handle the event. * * @param object $event * @return void */ public function handle() { DB::connection('test') ->table('master') ->insert([ 'name'=>'小黑', 'email'=>'234@qq.com' ]); } }
修改路由
Route::get('queue',function(){ //\App\Jobs\TestJob::dispatch(); //指定隊列名稱 //\App\Jobs\TestJob::dispatch()->onQueue('qq'); return event(new \App\Events\TestEvent()); });
運行路由
消費隊列
php artisan queue:work
以上就是“l(fā)aravel隊列怎么使用”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學(xué)習(xí)更多的知識,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
分享標(biāo)題:laravel隊列怎么使用
文章網(wǎng)址:http://www.muchs.cn/article12/jiohgc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、網(wǎng)站設(shè)計、移動網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)、定制開發(fā)、動態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)