最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2016年08月04日 11:52:53   作者:小談博客  
Laravel5提供了完善的隊列功能,只需要簡單的配置即可使用。這里簡單記錄下Laravel5中關(guān)于隊列的配置及使用。

前言

隊列常常用于兩種場景,一種是高并發(fā)的情況,一種是耗時的操作,可以將任務(wù)放到隊列中去,消費者從隊列取任務(wù)執(zhí)行,當(dāng)然還有失敗的情況如何處理,以及延遲,重試,更復(fù)雜的情況還有優(yōu)先級的實現(xiàn)。

在Laravel 5中使用隊列非常簡單,并且失敗處理,延遲,重試的方法都已經(jīng)實現(xiàn),下面簡單嘗試了一下Laravel的隊列服務(wù)。

Laravel默認支持以下幾種隊列服務(wù):sync, database, beanstalkd, sqs, redis,本例使用redis作為隊列服務(wù),需先配置好Redis服務(wù)。

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ù)就是keyvalue.

<?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:defaultList結(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ù)。

這證明隊列任務(wù)消費成功。

總結(jié)

本文的內(nèi)容到這就結(jié)束了,當(dāng)然,還有更多Laravel隊列的用法,可以請大家繼續(xù)參考官方手冊。希望本文的內(nèi)容對大家學(xué)習(xí)Laravel有所幫助。

相關(guān)文章

最新評論

汉中市| 和林格尔县| 舞钢市| 盐城市| 额尔古纳市| 农安县| 中方县| 博湖县| 博乐市| 库伦旗| 孙吴县| 咸宁市| 文登市| 临武县| 黎川县| 四会市| 高安市| 南陵县| 怀集县| 奈曼旗| 米林县| 新田县| 常山县| 金湖县| 秦安县| 永寿县| 芦溪县| 隆子县| 诸暨市| 永仁县| 金坛市| 嵩明县| 枞阳县| 石首市| 咸阳市| 襄垣县| 玉山县| 武宣县| 蓝田县| 阜平县| 大宁县|