gpt4 book ai didi

php - laravel - 多个作业结束后执行作业

转载 作者:行者123 更新时间:2023-12-04 03:20:33 24 4
gpt4 key购买 nike

我正在做一个项目,用户给我一些输入,然后我处理这些输入。这个处理需要很长时间,所以我正在使用队列,我想向用户发送邮件,告诉他们他们处理过的数据已经在我的应用程序上准备好了。我想要实现的是,将所有这些作业放入队列中,然后处理它们,并且当用户的所有处理结束时,向该用户发送邮件。

我正在使用 2 阶段队列。首先,我获取输入并调度一个作业,在该作业中输入被解析并划分为子数据集,然后从该作业调度另一个作业,该作业处理来自第一个作业的已解析输入数据。我这样做的原因是,第一份工作比第二份工作花费的时间少,我想使用工作只做处理,没有任何中断或额外的解析工作,第一阶段都是关于解析的,第二部分是所有关于处理。处理部分可能会失败,如果失败,队列会重新处理,所以如果我不将输入分成子作业,那么在作业快结束时失败可能会导致作业的所有处理重新完成.

如果我将所有这些作业放入同一个队列,并将该邮件作业分配给 Queue::after 方法,如果我理解的话,用户可能必须等待所有队列完成正确。我希望能够在用户的所有输入都已处理后向用户发送邮件,而无需等待任何其他用户的输入被处理。 Laravel 队列的文档显示了一个示例方法:

Queue::after(function (JobProcessed $event) {
// $event->connectionName
// $event->job
// $event->job->payload()
});

我从中了解到这在每个处理过的作业之后都有效,我可以使用 $event 对象访问作业属性。这不适用于我的两阶段队列结构。我知道我可以使用数据库中的一些计数器来检查是否所有处理都已完成,但我想知道是否有更好、更优雅的方法来实现这一点。

非常感谢。

最佳答案

现在已经过去几年了,但 Laravel 8 可能会为此提供一个解决方案:

https://github.com/laravel/framework/pull/32830

作业可以批量运行,并在所有作业完成、任何作业失败或所有作业成功完成时调用回调。

关于php - laravel - 多个作业结束后执行作业,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38673238/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com