首頁 > php框架 > Laravel > 主體

laravel 隊列是什麼

青灯夜游
發布: 2022-02-14 15:25:42
原創
3256 人瀏覽過

在laravel中,佇列是一種操作受限制的線性表,它只允許在表的前端(隊頭)進行刪除操作,而在表的後端(隊尾)進行插入操作;透過佇列,開發者可以將耗時任務的處理往後推延,進而可以大幅提升web請求回應速度。

laravel 隊列是什麼

本教學操作環境:windows7系統、Laravel6版、Dell G3電腦。

laravel中佇列的使用

1、什麼是佇列

##佇列是一種操作受限的線性表,特殊之處在於它只允許在表的前端進行刪除操作,而在表的後端進行插入操作。進行插入操作的端稱為隊尾,進行刪除操作的端稱為隊頭。

透過佇列,你可以將耗時任務 (如發送電子郵件) 的處理往後推延。延遲這些耗時的任務可以大幅提升 web 請求回應速度。

2、優點

  • #解耦:訊息佇列可以對系統進行解耦,提高回應速度,系統功能向內聚合,對外開放;

  • 非同步:訊息佇列可以對系統非同步功能進行剝離,減少功能耦合,提供開發效率;

  • ##削峰:訊息佇列可以削峰值限流,確保下游消費者穩定運作;

3、設定


##佇列設定檔儲存在config/queue.php 中。在這個檔案中,你可以找到框架中包含的每個佇列驅動程式的連接配置,其中包括資料庫,Beanstalkd,Amazon SQS,Redis,和一個同步驅動程式(sync-供本地使用)。 這裡使用 Redis 作為驅動,需要安裝 Redis 以及 相關擴充功能。

4、任務

我們需要把一些東西放入佇列中,我們可以稱之為任務。 Laravel 框架中建立任務為我們提供了以下命令:

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、分發laravel 隊列是什麼


laravel 隊列是什麼

laravel 隊列是什麼

laravel 隊列是什麼

##一旦編寫了任務類,就可以使用任務本身的dispatch 方法來分派它。傳遞給 dispatch 方法的參數將會傳遞給任務的建構子。

onQueue:           指定佇列;

onConnection:           指定佇列;

onConnection:  指定連線;

delay:          延遲佇列;

dispatchNow:          延遲佇列;laravel 隊列是什麼dispatchNow:          延遲佇列;

dispatchNow:       1 次該路由可以看到產生一個名為qq的佇列,後面我們對佇列進行消費

6、佇列消費

laravel 隊列是什麼

Laravel 有一個佇列處理器對新推入佇列的任務進行處理。透過 Artisan 指令 queue:work 來啟動佇列處理器。需要注意的是,一旦queue:work 命令啟動,將保持運行,直到它被手動停止或你關閉你的終端:

php artisan queue:worklaravel 隊列是什麼php artisan queue: work --once  新增參數,消費指定佇列

###
#在路由中简单调用
Route::get('queue',function(){
        \App\Jobs\TestJob::dispatch();
//        \App\Jobs\TestJob::dispatch()->onQueue('qq');
    });
登入後複製
###可以看到資料庫中新增了兩個數據,並且redis中資料被消費############ ############我們再次執行路由######################7、事件佇列######### ###佇列通常是用來處理延遲任務,事件是業務邏輯處理。 Laravel 中的 事件 觸發器會分發至佇列中進行非同步業務處理,那麼這樣之後可以快速回應而不用即時等待執行結果之後才能給使用者做出提示訊息。 ###如果需要把事件中的業務存放到佇列中去,我們並不需要重新進行佇列的分發,直接在對應的監聽器中實作 Illuminate\Contracts\Queue\ShouldQueue 介面即可。 ######建立事件和監聽器###
#消费qq队列
php artisan queue:work --queue=qq
登入後複製
###在app\providers\EventServiceProvider.php中註冊##############TestListener.php###
php artisan make:event TestEvent
php artisan make:listener TestListener
登入後複製
###修改路由###
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影片教學

以上是laravel 隊列是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!