当前位置: 代码迷 >> 综合 >> laravel5.5 queque队列+redis的使用
  详细解决方案

laravel5.5 queque队列+redis的使用

热度:18   发布时间:2024-02-05 21:29:54.0
  1. 首先安装predis扩展 :composer require predis/predis
  2. 队列的配置信息储存于 config/queue.php 文件中,在这个文件中你会发现框架所支持的队列驱动的配置连接示例。这些驱动包括:数据库,Beanstalkd,Amazon SQS,Redis,和一个同步(本地使用)的驱动。还有一个名为 null 的驱动表明不使用队列任务。
  3. 咱们这里所用的是 redis 驱动,所以一下只是对于redis驱动来示范的。
  4. 接下来我们还需要修改环境变量 QUEUE_DRIVER 的值为 redis: 修改 .env 文件
    QUEUE_DRIVER=redis
  5. 为了使用 redis 队列驱动,你需要在你的配置文件 config/database.php 中配置 Redis 的数据库连接。如果你的 Redis 队列连接使用的是 Redis 集群,你的队列名称必须包含 key hash tag。这是为了确保所有的 Redis 键对于一个给定的队列都置于同一哈希中:
    'redis' => ['client' => 'predis','default' => ['host' => env('REDIS_HOST', '127.0.0.1'),'password' => env('REDIS_PASSWORD', null),'port' => env('REDIS_PORT', 6379),'database' => 0,],
    ],
    这里我没做任何修改,还是用框架默认的配置格式。
  6. 生成一个任务类:php artisan make:job CreateAdminUsers

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

  7. 生成的类实现了 Illuminate\Contracts\Queue\ShouldQueue 接口,这意味着这个任务将会被推送到队列中,而不是同步执行。

  8.  

    任务类的结构如下所示:这个任务类,我只是写了一个向数据表admin_users添加数据的方法。咱们主要是了解队列的使用,handle方法里面的逻辑,根据自己的所需。自行开发即可。

     

    <?phpnamespace App\Jobs;use App\Entities\AdminUsers;
    use Illuminate\Bus\Queueable;
    use Illuminate\Queue\SerializesModels;
    use Illuminate\Queue\InteractsWithQueue;
    use Illuminate\Contracts\Queue\ShouldQueue;
    use Illuminate\Foundation\Bus\Dispatchable;class CreateAdminUsers implements ShouldQueue
    {use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;private $params = [];/*** Create a new job instance.** @return void*/public function __construct($params){$this->params = $params;}/*** Execute the job.** @return void*/public function handle(){$result = AdminUsers::create(['username' => $this->params['username'],'phone'    => $this->params['phone'],'password' => $this->params['password'],]);var_dump($result);}
    }

     

  9. 有时候队列中的任务会失败。Laravel 内置了一个方便的方式来指定任务重试的最大次数。当任务超出这个重试次数后,它就会被插入到 failed_jobs 数据表里面。

  10. 我们可以使用 queue:failed-table 命令来创建 failed_jobs 表的迁移文件,执行:php artisan queue:failed-table  会新建 database/migrations/{timestamp}_create_failed_jobs_table.php 文件

  11. 接着使用 migrate Artisan 命令生成 failed_jobs 表,执行:php artisan migrate

  12. 开始任务分发,我是在控制器中,写了一个简单的测试方法,如下:

    public function index(Request $request){$params    = ['username' => '王五','phone'    => '1344444444','password' => '$2y$10$yoOslZ7mlMUmv1SCZhh/rubAgH5.4qxpHSt78eTQ3G5L3J4uDDOhW',];dispatch(new CreateAdminUsers($params))->delay(Carbon::now()->addMinutes(1));
    }

     

  13. 开始测试,开始之前,我们需要在命令行启动队列系统,队列在启动完成后会进入监听状态:php artisan queue:listen

   14.数据表admin_users表已有的数据如下:

15.通过路由咱们访问一下控制器,让队列开始执行。执行后的数据表就会多一条数据。

可以看到自增ID已经到471了,因为在写这篇文章之前,已经做了好几次测试。为了方便大家看,中间的数据,我手动删除了。