国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > PHP > 正文

淺析Laravel5中隊列的配置及使用

2020-03-22 19:20:20
字體:
來源:轉載
供稿:網友
前言隊列常常用于兩種場景,一種是高并發的情況,一種是耗時的操作,可以將任務放到隊列中去,消費者從隊列取任務執行,當然還有失敗的情況如何處理,以及延遲,重試,更復雜的情況還有優先級的實現。在Laravel 5中使用隊列非常簡單,并且失敗處理,延遲,重試的方法都已經實現,下面簡單嘗試了一下Laravel的隊列服務。Laravel默認支持以下幾種隊列服務:sync, database, beanstalkd, sqs, redis,本例使用redis作為隊列服務,需先配置好Redis服務。1.隊列服務配置在配置文件queue.php的connections中已經默認定義了redis的連接:'redis' = [ 'driver' = 'redis', 'connection' = 'default', 'queue' = 'default', 'expire' = 60,],在.env環境配置文件中把默認的隊列驅動改成redis:QUEUE_DRIVER=redis為了避免配置緩存的影響,執行以下命令清除并重建配置緩存:php artisan config:cache2.新建Queueable Jobs使用命令:php artisan make:job MyJob新建一個名為MyJob的隊列處理類,在App/Jobs目錄下自動生成一個MyJob.php文件。MyJob.php需要實現handle方法,用來具體執行隊列任務,html' target='_blank'>構造函數可以用來傳遞需要的參數,handle方法支持依賴注入。這里handle方法隨便寫了一個,就是往一個list類型數據結構中存一個key-value數據,測試消費隊列的時候有沒有起作用,構造函數傳兩個參數就是key和value.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方法調用隊列,將任務放入隊列中,控制器中寫個方法如public function test(),new MyJob的構造函數傳兩個隨機生成的字符串參數:$queueId = $this- dispatch(new MyJob('key_'.str_random(4), str_random(10)));dd($queueId);配置并訪問路由,可以多訪問幾次,然后到Redis中查看,會發現把隊列存入了一個queue::queue:default的List結構中:其中value內容如下,這是轉換成json格式的,而實際上是經過序列號的字符串: "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參數里包含了隊列服務Job的名稱,構造函數的參數等信息,消費者執行任務的依據。attempts表示重試的次數,往往執行隊列任務失敗了會重試,可以設置最多嘗試次數。3.消費隊列這個時候任務只是入了隊列,但并沒有消費,執行:php artisan queue:listen這個命令,Laravel就開始消費隊列。可以看到這幾個任務以此被消費,再去Redis看看有沒有實現預期要達到的效果,每個任務往一個List類型的結構寫入數據。這證明隊列任務消費成功。
總結
本文的內容到這就結束了,當然,還有更多Laravel隊列的用法,可以請大家繼續參考官方手冊。希望本文的內容對大家學習Laravel有所幫助。PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 深州市| 广汉市| 黔南| 和龙市| 阿拉尔市| 宁国市| 田阳县| 仁寿县| 东光县| 报价| 林甸县| 班玛县| 莱西市| 舞钢市| 文山县| 西盟| 布尔津县| 苏尼特右旗| 德江县| 武功县| 宁城县| 通渭县| 铜梁县| 阳泉市| 柳江县| 宣化县| 商河县| 江永县| 武邑县| 普兰店市| 眉山市| 潼南县| 宝丰县| 乌拉特前旗| 德保县| 达拉特旗| 济源市| 教育| 仙居县| 河曲县| 长沙县|