如何使两个工作之间的延迟?

时间:2019-02-07 15:22:53

标签: php laravel jobs

我用过laravel作业,我试图延迟地分派两个作业,但不起作用。

我的想法是在x个作业之间进行延迟分配。

等待10秒发送->作业1

等待10秒发送->作业2

等待10秒发送->作业3

以此类推...

''Output~looks~strange.''

artisan queue:work --tries=1  --queue=generate-xml

2 个答案:

答案 0 :(得分:1)

听起来好像是要暂停提交作业之间的主要流程,或者是要错开作业本身的延迟。

如果您确实需要暂停十秒钟,则可以使用sleep(10)

如果您只想在作业之间强制执行约10秒的等待,那么您应该在第一个作业上添加10秒的延迟,在第二个作业上添加20秒,在第三个作业上添加30秒,等等。

答案 1 :(得分:0)

我猜下面的代码是循环完成的:

generateXML::dispatch($this->account)
                ->onQueue('generate-xml')
                ->delay(Carbon::now()->addSeconds(10));

对吗? 在这种情况下,delay()方法只会从排队的时间开始延迟作业的执行,因此,如果您现在想每10秒执行一次就排队10个作业,则需要增加延迟您在循环中调用的每个调度程序的时间减少了10秒。

或者,您也可以在第一个作业结束时分派一个新作业,然后以10秒的新延迟将下一个作业排入队列。

请记住,尽管某些队列(如亚马逊队列)不允许无限延迟,但是对可以将项目保留在队列中的时间施加了限制...