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 个月内第二次发生这种情况,我在任何地方都找不到关于此错误的任何信息,所以我决定在这里分享解决方案。