laravel隊列怎么使用

今天小編給大家分享一下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)速度。

laravel中隊列的使用

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的隊列,后面我們對隊列進行消費

laravel隊列怎么使用

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ù)被消費

laravel隊列怎么使用

laravel隊列怎么使用

我們再次執(zhí)行路由

laravel隊列怎么使用

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中注冊

laravel隊列怎么使用

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());
    });

運行路由

laravel隊列怎么使用

消費隊列

php artisan queue:work

laravel隊列怎么使用

以上就是“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)

網(wǎng)站優(yōu)化排名