Laravel5.7 队列使用redis驱动

安装redis扩展

用pecl安装php redis扩展

  sudo pecl install redis

安装predis/predis包

用composer安装predis/predis扩展

  composer require  predis/predis

修改配置文件 config/database.php

修改为自己的redis服务对应的配置(我这里使用的是默认的配置)

  'redis' => [

        'client' => 'predis',

        'default' => [
            'host' => env('REDIS_HOST', '127.0.0.1'),
            'password' => env('REDIS_PASSWORD', null),
            'port' => env('REDIS_PORT', 6379),
            'database' => env('REDIS_DB', 0),
        ],
  ]

修改配置文件 config/queue.php

queue默认default修改为{default}(注:一定要修改 否则onQueue()分发任务到指定队列无法使用)

  'redis' => [
            'driver' => 'redis',
            'connection' => 'default',
            'queue' => '{default}',
            'retry_after' => 90,
            'block_for' => null,
        ],

将队列驱动改为redis修改.env

 QUEUE_CONNECTION=redis

创建任务

1.生成任务类

在你的应用程序中,队列的任务类都默认放在 app/Jobs 目录下。如果这个目录不存在,那当你运行 make:job Artisan 命令时目录就会被自动创建。你可以用以下的 Artisan 命令来生成一个新的队列任务:

php artisan make:job ApiBehavior

2.任务类结构
任务类的结构很简单,一般来说只会包含一个让队列用来调用此任务的 handle 方法。我们来看一个示例的任务类。

<?php

namespace App\Jobs;

use App\BehaviorLog;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\DB;

class ApiBehavior implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
 	protected $data;
    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(array $data)
    {
        //
        $this->data = $data;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
      DB::table('behavior_log')->insert(['appid'=>$this->data['appid']]);
    }
}

任务调用

1.在需要执行队列的地方:

 // 这个任务将被分发到默认队列...
 ApiBehavior::dispatch($data);
 
 //这个任务将被发送到「behavior」队列..
  ApiBehavior::dispatch($data)->onQueue('behavior');

2.运行队列处理器
Laravel 包含了一个队列处理器以将推送到队列中的任务执行。你可以使用 queue:work Artisan 命令运行处理器。 注意一旦 queue:work 命令开始执行,它会一直运行直到它被手动停止或终端被关闭。

 php artisan queue:work

然后执行代码可以看到终端显示:

 Sakura@My-MacBook  ~/points   master ●  php artisan queue:work  
[2019-04-12 08:17:53][akR1aOCOIbCNhXZWHWeKAgOXczXxpUX6] Processing: App\Jobs\ApiBehavior
[2019-04-12 08:17:53][akR1aOCOIbCNhXZWHWeKAgOXczXxpUX6] Processed:  App\Jobs\ApiBehavior

3.指定连接 & 队列
处理器应该使用哪个队列连接。 传递给 work 的连接名应该与你的 config/queue.php 配置文件中定义的连接之一相符。

//指定链接
php artisan queue:work redis
//连接中指定的队列 (如果php artisan queue:work监听默认队列 如果自定队列需要指定队列--queue='队列名称')
php artisan queue:work redis --queue=behavior

处理失败的任务

有时你的队列任务会失败。别担心,凡事无完美! Laravel 包含了一个便捷的方式指定任务会被最大尝试的次数。在一个任务达到了它最大尝试次数后,它会被放入 failed_jobs 表。要创建 failed_jobs 表你可以使用 queue:failed-table 命令:

php artisan queue:failed-table

php artisan migrate

然后,运行你的 队列处理器 ,你应该在 queue:work 命令上使用 --tries 选项。如果你没有指定 --tries 的值,任务将会被无限次尝试。

php artisan queue:work  --tries=3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值