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 实例,并且队列可以说是在环境之间“共享”并且给人留下深刻印象,该工作没有被推送到队列。
有一个 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 实例,并且队列可以说是在环境之间“共享”并且给人留下深刻印象,该工作没有被推送到队列。