Laravel SQS工人挂起

时间:2019-06-05 14:52:10

标签: php laravel amazon-sqs

我正在运行一个处理sqs-fifo队列的工作器,它在作业之间挂起(请参阅时间):

[2019-06-05 14:28:10] Processing: App\Jobs\MyApp\MyJob
[2019-06-05 14:28:10] Processed:  App\Jobs\MyApp\MyJob
[2019-06-05 14:28:23] Processing: App\Jobs\MyApp\MyJob
[2019-06-05 14:28:23] Processed:  App\Jobs\MyApp\MyJob
[2019-06-05 14:28:34] Processing: App\Jobs\MyApp\MyJob
[2019-06-05 14:28:34] Processed:  App\Jobs\MyApp\MyJob
[2019-06-05 14:28:34] Processing: App\Jobs\MyApp\MyJob
[2019-06-05 14:28:35] Processed:  App\Jobs\MyApp\MyJob
[2019-06-05 14:28:38] Processing: App\Jobs\MyApp\MyJob
[2019-06-05 14:28:38] Processed:  App\Jobs\MyApp\MyJob

我正在使用laravel-sqs-fifo-queue驱动程序,您知道是什么原因引起的吗?

1 个答案:

答案 0 :(得分:0)

据我所知,没有任何东西可以保证在处理完作业之后,下一个作业将立即开始,不会延迟。 由于您的队列驱动程序是sqs,因此您的队列侦听器需要通过Internet查询Amazon以获取下一个要执行的工作(下一个工作+序列化数据)所需的信息,从那一刻起,您至少会出现网络延迟侦听器完成一项工作,并立即获得处理下一个工作所需的信息。 在没有问题的多侦听器方案中,您可以假设在同一侦听器处理的作业之间存在一些延迟,因为其他侦听器将同时处理其他排队的作业,但是如果您需要按顺序处理,恐怕对于那些排队的工作,至少是不可避免的。

SQS还可与轮询一起使用,这意味着允许工人每隔X片时间向SQS请求下一个要处理的下一个队列作业(如果有),因此您仍然可以固定使用这些离散时间。

我还看到on the documentation可以设置每个队列DelaySeconds的参数,因为我看到您的延迟似乎比前面提到的延迟大得多,因此我还将检查该参数在我的配置上。