我已经使用了laravel作业,我试着用延迟来分派两个作业,但都不起作用。
我的想法是调度x个作业,它们之间有延迟。
等待10秒调度->作业%1
等待10秒调度->作业2
等待10秒调度->作业3
以此类推。
artisan queue:work --tries=1 --queue=generate-xmlgenerateXML::dispatch($this->account)
->onQueue('generate-xml')
->delay(Carbon::now()->addSeconds(10));发布于 2019-02-08 00:05:57
这听起来像是想在提交作业之间暂停您的主进程,或者您想错开作业本身的延迟。
如果你真的需要暂停10秒钟,那么你可以使用sleep(10)。
如果您想在两个作业之间强制执行大约10秒的等待,那么您应该在第一个作业中增加10秒的延迟,在第二个作业中增加20秒的延迟,在第三个作业中增加30秒的延迟,依此类推。
发布于 2019-02-08 01:07:04
我猜下面的代码是在一个循环中完成的:
generateXML::dispatch($this->account)
->onQueue('generate-xml')
->delay(Carbon::now()->addSeconds(10));对吗?如果是这种情况,delay()方法只会从您将作业排队时起延迟作业的执行,因此,如果您现在排队了10个作业,并且希望每10秒执行一次,则需要在循环中调用每个分派时将延迟递增10秒。
或者,您也可以在第一个作业结束时调度一个新作业,然后将下一个作业排入队列,新的延迟也为10秒。
请记住,虽然有些队列(如亚马逊的)不允许无限延迟,但对您可以在队列中保留项目的时间进行了限制……
https://stackoverflow.com/questions/54576606
复制相似问题