我用过laravel作业,我试图延迟地分派两个作业,但不起作用。
我的想法是在x个作业之间进行延迟分配。
等待10秒发送->作业1
等待10秒发送->作业2
等待10秒发送->作业3
以此类推...
''Output~looks~strange.''
artisan queue:work --tries=1 --queue=generate-xml
答案 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秒的新延迟将下一个作业排入队列。
请记住,尽管某些队列(如亚马逊队列)不允许无限延迟,但是对可以将项目保留在队列中的时间施加了限制...