How do I fix the Laravel queue error: "Instances of Aws\Sqs\SqsClient cannot be serialized"?
How do I fix the Laravel queue error: "Instances of Aws\Sqs\SqsClient cannot be serialized"?
我使用 Laravel v8.x 队列系统和一些批处理作业创建了一个数据迁移器。对于队列后端,我使用的是 AWS SQS。在不更改任何代码的情况下,有一天作业开始随机失败并出现以下错误:
/var/www/data-migrator/vendor/aws/aws-sdk-php/src/AwsClient.php:275
Instances of Aws\Sqs\SqsClient cannot be serialized
堆栈跟踪指向以下未更改的代码行:
})->onConnection($queue_conn)->dispatch();
(前面的代码行只是设置了批处理、then
回调和 catch
回调。)
随着时间的推移,这些随机失败的数量不断增加,直到所有作业都失败,同样没有对代码进行任何更改。出现此错误的原因是什么,我该如何解决?
答案是 AWS 决定改变其基础设施和 SDK 的工作方式,以便我们认为安全的产品部署可以随机中断。解决方法很简单:
$ composer update
$ git add composer.lock
$ git commit -m 'update because bezos'
$ git push
在产品实例上:
$ git pull
$ composer install
$ php artisan queue:restart
这是 12 个月内第二次发生这种情况,我在任何地方都找不到关于此错误的任何信息,所以我决定在这里分享解决方案。
我使用 Laravel v8.x 队列系统和一些批处理作业创建了一个数据迁移器。对于队列后端,我使用的是 AWS SQS。在不更改任何代码的情况下,有一天作业开始随机失败并出现以下错误:
/var/www/data-migrator/vendor/aws/aws-sdk-php/src/AwsClient.php:275
Instances of Aws\Sqs\SqsClient cannot be serialized
堆栈跟踪指向以下未更改的代码行:
})->onConnection($queue_conn)->dispatch();
(前面的代码行只是设置了批处理、then
回调和 catch
回调。)
随着时间的推移,这些随机失败的数量不断增加,直到所有作业都失败,同样没有对代码进行任何更改。出现此错误的原因是什么,我该如何解决?
答案是 AWS 决定改变其基础设施和 SDK 的工作方式,以便我们认为安全的产品部署可以随机中断。解决方法很简单:
$ composer update
$ git add composer.lock
$ git commit -m 'update because bezos'
$ git push
在产品实例上:
$ git pull
$ composer install
$ php artisan queue:restart
这是 12 个月内第二次发生这种情况,我在任何地方都找不到关于此错误的任何信息,所以我决定在这里分享解决方案。