您好,登錄后才能下訂單哦!
這篇文章給大家介紹如何在Laravel5中配置并使用隊列,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
Laravel 是一套簡潔、優(yōu)雅的PHP Web開發(fā)框架。它可以讓你從面條一樣雜亂的代碼中解脫出來;它可以幫你構(gòu)建一個完美的網(wǎng)絡(luò)APP,而且每行代碼都可以簡潔、富于表達力。
1.隊列服務(wù)配置
在配置文件queue.php的connections
中已經(jīng)默認定義了redis
的連接:
'redis' => [ 'driver' => 'redis', 'connection' => 'default', 'queue' => 'default', 'expire' => 60, ],
在.env環(huán)境配置文件中把默認的隊列驅(qū)動改成redis
:
QUEUE_DRIVER=redis
為了避免配置緩存的影響,執(zhí)行以下命令清除并重建配置緩存:
php artisan config:cache
2.新建Queueable Jobs
使用命令:
php artisan make:job MyJob
新建一個名為MyJob的隊列處理類,在App/Jobs
目錄下自動生成一個MyJob.php文件。
MyJob.php需要實現(xiàn)handle
方法,用來具體執(zhí)行隊列任務(wù),構(gòu)造函數(shù)可以用來傳遞需要的參數(shù),handle
方法支持依賴注入。
這里handle
方法隨便寫了一個,就是往一個list
類型數(shù)據(jù)結(jié)構(gòu)中存一個key-value
數(shù)據(jù),測試消費隊列的時候有沒有起作用,構(gòu)造函數(shù)傳兩個參數(shù)就是key
和value
.
<?php namespace App\Jobs; use App\Jobs\Job; use Illuminate\Queue\SerializesModels; use Illuminate\Queue\InteractsWithQueue; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Support\Facades\Redis; class MyJob extends Job implements ShouldQueue { use InteractsWithQueue, SerializesModels; private $key; private $value; /** * Create a new job instance. * * @return void */ public function __construct($key, $value) { $this->key = $key; $this->value = $value; } /** * Execute the job. * * @return void */ public function handle() { Redis::hset('queue.test', $this->key, $this->value); } public function failed() { dump('failed'); } }
在控制器中使用dispatch
方法調(diào)用隊列,將任務(wù)放入隊列中,控制器中寫個方法如public function test()
,new MyJob
的構(gòu)造函數(shù)傳兩個隨機生成的字符串參數(shù):
$queueId = $this->dispatch(new MyJob('key_'.str_random(4), str_random(10))); dd($queueId);
配置并訪問路由,可以多訪問幾次,然后到Redis
中查看,會發(fā)現(xiàn)把隊列存入了一個queue::queue:default
的List
結(jié)構(gòu)中:
其中value
內(nèi)容如下,這是轉(zhuǎn)換成json
格式的,而實際上是經(jīng)過序列號的字符串:
{ "job": "Illuminate\\Queue\\CallQueuedHandler@call", "data": { "command": "O:14:\"App\\Jobs\\MyJob\":6:{s:19:\"\u0000App\\Jobs\\MyJob\u0000key\";i:1;s:21:\"\u0000App\\Jobs\\MyJob\u0000value\";i:2;s:10:\"connection\";N;s:5:\"queue\";N;s:5:\"delay\";N;s:6:\"\u0000*\u0000job\";N;}" }, "id": "EV2bhqUlx0T8pRCVHw1qT0fkP8AQcyI8", "attempts": 1 }
這里data
參數(shù)里包含了隊列服務(wù)Job
的名稱,構(gòu)造函數(shù)的參數(shù)等信息,消費者執(zhí)行任務(wù)的依據(jù)。attempts
表示重試的次數(shù),往往執(zhí)行隊列任務(wù)失敗了會重試,可以設(shè)置最多嘗試次數(shù)。
3.消費隊列
這個時候任務(wù)只是入了隊列,但并沒有消費,執(zhí)行:
php artisan queue:listen
這個命令,Laravel就開始消費隊列。
可以看到這幾個任務(wù)以此被消費,再去Redis
看看有沒有實現(xiàn)預(yù)期要達到的效果,每個任務(wù)往一個List
類型的結(jié)構(gòu)寫入數(shù)據(jù)。
關(guān)于如何在Laravel5中配置并使用隊列就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學(xué)到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。