美文网首页
队列知识

队列知识

作者: Amy1234567 | 来源:发表于2023-06-19 17:40 被阅读0次

    什么是队列?

    队列就是将耗时的任务延迟处理,以减少web请求和响应的时间。

    Laravel队列为后台队列提供了统一的API。

    什么是队列驱动?

    即数据库驱动,redis驱动,Beanstalkd驱动等等。还有一个特殊的驱动:null队列驱动 -- 用于那些放弃队列的任务。

    这些驱动的配置,都写在config/queue.php里。

    redis队列怎么配置?

    config/queue.php中配置redis驱动,config/database.php中配置redis连接信息。

    怎么生成任务类?

    php artisan make:job ProcessJob

    任务类都保存在app/Jobs目录。任务类都会实现Illuminate\Contracts\Queue\ShouldQueue类,以告诉laravel,将任务推送给队列,而不是立即执行。

    任务类的结构是什么?

    任务类可以包含构造函数,通常只包含一个handle方法,在任务处理时被调用。

    怎么分发任务到队列?

    通过dispatch方法分发任务,dispatch方法的唯一参数就是任务实例:dispatch(new ProcessJob());

    分发任务时,可以指定队列吗?

    可以指定队列,也可以指定连接,并且可以在序列中执行队列

    指定队列:dispatch(new ProcessJob())->onQueue('processing);

    指定连接:dispatch(new ProcessJob())->onConnection('sqs');

    任务链:ProcessJob::withChain([new OptimizePodcast,new ReleasePodcast])->dispatch();

    还可以延时分发队列:dispatch(new ProcessJob())->delay(now()->addMinutes(10)); //10分钟之后执行

    指定最大失败次数和超时时间有几种方法?

    指定最大失败次数有三种方法,指定超时时间有两种方法。

    指定最大失败次数:

    方法一:用artisan命令:php artisan queue:work --tries=3

    方法二:定义在任务类中:public $tries=5;  //优先级高于artisan命令

    方法三:在任务类中添加retryUtil方法, 表示在指定时间内允许任务的最大尝试次数。

    public function retryUtil(){

        return now()->addSeconds(5);

    }

    指定超时时间:

    方法一:用artisan命令:php artisan queue:work --timeout=30 //最大运行时间30秒

    方法二:在任务类中定义超时时间:public $timeout=120;   //单位(秒)。优先级高于命令行定义的时间

    任务异常时怎么处理?

    如果任务在处理过程中有异常抛出,会自动释放回队列,以便再次尝试执行。任务会持续被释放,直到尝试次数达到应用允许的最大次数。

    怎么运行队列进程?

    Laravel自带了一个队列进程,用来处理被推动到队列中的任务。

    运行队列进程的命令:php artisan queue:work

    队列进程开始运行后,会持续监听队列,直到手动停止或关闭终端。

    队列进程是长生命周期的进程,在启动后会驻留内存。如果应用有改动,是不会影响进程的,要重启队列进程。

    supervisor是什么?

    supervisor是linux系统中常用的进程守护程序。如果队列进程queue:work意外关闭,它会重新启动队列进程。

    相关文章

      网友评论

          本文标题:队列知识

          本文链接:https://www.haomeiwen.com/subject/knyeydtx.html