【发布时间】:2020-07-14 18:50:37
【问题描述】:
我的 laravel 队列系统有问题。出于性能目的,我们使用带有 amazons SQS 的 laravel 排队系统来进行更繁重的计算。这至少对我们的大部分工作都有效。其中一些原始计算时间约为 25 秒的队列会在“正在处理”状态下阻塞队列 6 分钟。
我们确实记录了作业的完整 handle 函数,并且输出在任何时候都是正确的。事实上,最后一条日志语句(函数结束)是在进入函数 20 秒后打印的。数据按预期计算,数据库是最新的,但作业仍处于“处理中”。
在我们故意在句柄函数结束时使作业崩溃后,计算的数据被完美地存储,但显然队列也崩溃了。所以我想它必须是在句柄功能之后发生的事情。也许有分配内存的东西?
队列的配置是默认的sqs驱动配置:
'sqs' => array(
'driver' => 'sqs',
'key' => env('AWS_KEY', 'secret'),
'secret' => env('AWS_SECRET', 'secret'),
'queue' => env('AWS_SQS_QUEUE', 'secret'),
'region' => env('AWS_SQS_REGION', 'secret'),
),
编辑: 我发现它不仅是队列,而且当我将作业作为命令执行时,会出现相同的行为:
我打印“完成”。作为命令中的最后一条语句,在打印出来之后,控制台会暂停几秒钟,然后返回控制台输入。
当我注释掉查询最多的部分时,问题就消失了,比如我使用的查询越多,我就越需要等待控制台。
我希望你们中的任何人都知道导致这种行为的原因以及我们如何解决它。
提前致谢
【问题讨论】:
-
你能在配置中包含队列设置吗?
-
我添加了队列配置,但不是很壮观
-
你的队列超时时间是多少?
-
没有超时。唯一的参数是设置为 3 的
tries和队列的名称 (--queue=...)。我们使用三个不同的优先队列。
标签: laravel queue jobs laravel-queue