Amazon SQS - 并非所有作业都推送到弹性 beantalk 上的队列

Amazon SQS - not all jobs pushed to the queue on elastic beanstalk

有一个 laravel 项目和代码块如下所示

$pendingToProcessFiles = PendingToProcessFile::where('tries', '<', 3)->orderBy('created_at')->get();

Log::channel('upload-to-s3-jobs-log')->info("Using queue {$this->queue}");

foreach ($pendingToProcessFiles as $index => $pendingToProcessFile) {
    $jobObject = new UploadToS3Job($pendingToProcessFile);
    dispatch($jobObject->onQueue($this->queue));
}

这在我的本地计算机 (laradock) 中按预期工作,如果我在 table 中有很多属于 PendingToProcessFile 模型的记录也没关系。

问题发生在弹性 beanstalk 实例中,并非所有记录都在处理。当 cron 作业触发此代码块时,它每次可以处理 100 条记录中的 10 个文件,或 1000 条记录中的 80 个文件(并且不是按照 eloquent 查询后结果出现在集合中的顺序)。

尝试使用

等主管配置添加一些日志记录
[program:upload-to-s3]
process_name=%(program_name)s_%(process_num)02d
command=php artisan queue:work sqs --queue=upload-to-s3 --timeout=600 --sleep=3 --tries=3
directory=/var/app/current
autostart=true
autorestart=true
user=root
numprocs=4
redirect_stderr=true
stdout_logfile=/etc/supervisord.d/output.log
stderr_logfile=/etc/supervisord.d/error.log

但是那些日志文件中没有添加任何内容(日志文件在那里,我已经检查过),所以我不知道这里发生了什么...

顺便说一句,upload-to-s3 是标准的 sqs 队列。

如果有人可以就此给我任何建议,将不胜感激!

对于面临此类问题的每个人,请确保您在 aws 中针对不同的环境使用不同的 sqs 实例区域。对于这个案例,问题是,弹性 beantalk 开发和生产实例在同一区域使用相同的 sqs 实例,并且队列可以说是在环境之间“共享”并且给人留下深刻印象,该工作没有被推送到队列。