首页 > 解决方案 > Laravel SQS Worker 挂起

问题描述

我正在运行一个处理 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驱动程序知道什么会导致这种情况吗?

标签: phplaravelamazon-sqs

解决方案


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

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

我还在文档中看到DelaySeconds可以设置每个队列参数,因为我看到你的延迟似乎比前面提到的要大得多,我也会在我的配置中检查这个参数。


推荐阅读