天天播报:PHP-web框架Laravel-队列(三)

并发处理

Laravel的队列系统默认是串行处理作业的,这意味着每个作业都要等待前一个作业处理完毕后才能开始处理。但是,有时候我们需要同时处理多个作业,这就需要并发处理。


【资料图】

Laravel通过将队列连接设置为"redis","database"或"beanstalkd"来实现并发处理。这些连接可以处理多个并发作业。

作业优先级

Laravel队列系统还支持作业优先级,这意味着我们可以为不同类型的作业分配不同的优先级。优先级高的作业将在优先级低的作业之前处理。优先级默认为0,值越高表示优先级越高。

我们可以使用--queue选项在调度作业时指定作业队列。例如,我们可以使用以下代码将作业推送到"high"队列:

ProcessPodcast::dispatch($podcast)->onQueue("high");

然后,我们可以使用以下命令启动一个专用的队列进程来处理高优先级队列:

php artisan queue:work --queue=high

作业超时

如果一个作业执行时间过长,可能会导致队列堵塞,这就需要设置作业的超时时间。Laravel默认的作业超时时间为60秒。

我们可以在定义作业类时使用--timeout选项来设置超时时间。例如,以下代码设置超时时间为120秒:

php artisan make:job ProcessPodcast --timeout=120

如果作业在超时时间内没有处理完成,Laravel将尝试终止该作业并将其标记为失败。

重试作业

Laravel队列系统默认会自动重试作业,如果一个作业失败了,它将被重新推送到队列中,直到达到最大尝试次数。最大尝试次数默认为3,可以在config/queue.php中进行配置。

如果要禁用作业重试,我们可以在定义作业类时使用--tries选项将最大尝试次数设置为0:

php artisan make:job ProcessPodcast --tries=0

作业失败

如果一个作业达到最大尝试次数仍然失败,它将被标记为失败。Laravel默认会将失败的作业写入日志文件。我们还可以在config/queue.php中配置将失败的作业发送到其他通知渠道,例如电子邮件或Slack。

当然,我们还可以通过手动调用fail方法来标记一个作业为失败:

/** * Execute the job. * * @return void */public function handle(){    if ($this->somethingWentWrong()) {        $this->fail(new Exception("Something went wrong."));    }    // Process the podcast...}

关键词:

    为你推荐

    协鑫新能源:拟9037.98万元出售7座光伏电站

    3月16日,协鑫新能源发布公告称,公司间接附属苏州协鑫新能源及苏州协鑫开发(作为卖方)、江苏和盛(作为买方)于2022年3月16日与该等目标公司

    来源:国际能源网 22-03-18

    三峡能源河曲100MW光伏+储能发电EPC项目中标候选人公示

    3月16日,三峡能源河曲100MW光伏+储能发电项目光伏场区工程EPC总承包中标候选人公示。中标候选人第1名:中国能源建设集团山西电力建设第一

    来源:国际能源网 22-03-18

    因地制宜利用光伏 四川成都市近零碳排放区试点建设工作方案发布

    3月14日,成都市生态环境局等7部门发布成都市近零碳排放区试点建设工作方案,方案指出,到2025年,力争建成近零碳园区、工业企业、公共机构

    来源:国际能源网 22-03-18

    青海:重点支持黄河上游光风基地、源网荷储一体化等项目融资

    3月15日,青海省发改委发文称,积极推进金融战略合作加大黄河青海流域基础设施建设项目融资支持力度。其中提到,2022年,青海省发展改革委

    来源:国际能源网 22-03-18

    人民体谈:东京残奥会,共同见证他们别样的精彩

    当大家还时不时回味起东京奥运会的精彩,紧随其后的东京残奥会也将于24日开幕,进行为期13天的赛程。近日,残奥会中国代表团已分批出征东京

    来源:人民网21-08-24
    返回顶部