• laravel队列


    对列作用
      队列的目的是将耗时的任务延时处理,比如发送邮件,从而大幅度缩短Web请求和相应的时间。
      队列进程原理:写一个死循环的脚本在Linux系统持续运行,新的队列任务push到这个脚本中。


    一、配置
      队列 配置文件存放在config/queue.php 。在该文件中你将会找到框架自带的每一个队列驱动的连接配置,包括数据库、
    Beanstalkd、 IronMQ、 Amazon SQS、 Redis 以及同步(本地使用)驱动。其中还包含了一个 null 队列驱动以拒绝队
    列任务。默认是sync,即同步的,直接处理,无队列.要将其修改为对应的类型,如database等。
      这次主要探讨 使用database 保存队列任务。

    // 在.env 文件中修改:
    QUEUE_DRIVER=database

    // 清除配置缓存。这是个巨坑,测试时因为没执行这一步导致配置不生效,懵逼了许久
    php artisan config:cache

    二、依赖
      1.数据库依赖:为了使用database 队列驱动,需要一张数据库表来存放任务,要生成创建该表的迁移,
    运行 Artisan 命令queue:table ,迁移被创建好了之后,使用migrate 命令运行迁移:


      php artisan queue:table
      php artisan migrate

    // 数据库会生成以下两张表:
      jobs
      migrations

    2.其他队列类型依赖
      下面是以上列出队列驱动需要安装的依赖:
      • Amazon SQS: aws/aws-sdk-php ~3.0
      • Beanstalkd: pda/pheanstalk ~3.0
      • IronMQ: iron-io/iron_mq ~2.0
      • Redis: predis/predis ~1.0
     注意:

      1、因为我使用两套环境(虚拟机、本地,两套环境共享项目目录),正常访问的是虚拟机的数据库。但使用 php artisan migrate
      相关命令时报 2002 拒绝连接错误 ,因为在控制台访问到了本地的数据库。所以数据库配置:
      DB_HOST=localhost
      修改为 具体的ip:
      DB_HOST=192.168.82.52
      清除缓存:
      php artisan config:cache

      2、报错:SQLSTATE[42000]: 1071 Specified key was too long; max key length is 767 bytes
    动配置迁移生成的默认字符串长度,你可以通过调用 AppServiceProvider 中的 Schema::defaultStringLength 方法来配置它。
      局部配置:在报错的迁移脚本中加 Schema::defaultStringLength(191);
      全局配置:在AppProvidersAppServiceProvider 的boot方法加Schema::defaultStringLength(191);

    三、生成任务类
      1、通常,所有的任务类都保存在 app/Jobs 目录.如果 app/Jobs 不存在,在运行 Artisan 命令 make:job 的时候,
    它将会自动创建。你可以通过 Artisan CLI 来生成队列任务类:

      php artisan make:job queueTest

      生成的类 queueTest 都实现了 IlluminateContractsQueueShouldQueue 接口,
    告诉 Laravel 将该任务推送到队列,而不是立即运行。

    2、在 queueTest.php 的代码如下:
    public function handle()
    {
    sleep(5);
    Zhang::insert([ 'name' => 'queue.' . time() .uniqid(), 'time' => time()]);
    }


    // 在TestController.php 控制器的推送任务如下:
    public function queueTest()
    {
    for($i = 0; $i < 100; $i ++) {
    dispatch(new queueTest("ssss".$i));
    }
    exit('程序结束');
    }

    // routes添加路由:
    Route::get('/queue', 'TestController@queue' );

    四、启动队列监听
    基本命令:

    php artisan queue:listen //监听队列请求,只要运行着,就能一直接受请求,除非手动终止;

    其他类型的监听、守护进程请参考顶部资料。

    五、测试成功
      在浏览器开几个窗口同时访问该地址:localhost/queue , 出现以下情况说明队列任务推送成功:
      1、访问后,浏览器立即打印 '程序结束' ,说明任务已经压入队列;
      2、进入数据库查看jods表,会发现很多还没执行完的任务;
      3、在控制台会监听到正在运行的进程:
      [2018-01-03 11:53:46] Processing: AppJobsqueueTest
      [2018-01-03 11:53:56] Processed: AppJobsqueueTest
      [2018-01-03 11:53:57] Processing: AppJobsqueueTest
    总结
    以上只是对laravel队列的一些基于database的基础运用,队列的知识远远不止这些。如果你有好的例子分享,欢迎留言。

    有需要交流的小伙伴可以点击这里加本人QQ:luke

  • 相关阅读:
    android如何与asp.net服务端共享session
    WCF 套接字连接已中止。这可能是由于处理消息时出错或远程主机超过接收超时或者潜在的网络资源问题导致的
    PHP 实现单一入口 apache配置
    action func用法记记
    NETCore Bootstrap Admin 通用后台管理权限 [1]: 前后台分离系统简介
    开源 一套 Blazor Server 端精致套件
    NETCore Bootstrap Admin 通用后台管理权限 [3]: 精简版任务调度模块
    NETCore Bootstrap Admin 通用后台管理权限 [2]: Blazor 版本介绍
    C#服务器全面讲解与制作
    批量生成二维码
  • 原文地址:https://www.cnblogs.com/starluke/p/11783924.html
Copyright © 2020-2023  润新知