rea*_*ebo 2 jobs laravel laravel-6
我的网络应用程序有大量作业,除了一个之外,所有作业都运行良好。
我需要这个特定的工作存活很长一段时间,整整一个小时,3600秒,如果超过时间就会失败,并且不要重试。
我试图在我的工作中设置这个属性
public $timeout = 3600;
public $retryAfter = 4000;
public $tries = 1;
Run Code Online (Sandbox Code Playgroud)
我发现失败后这个特定的作业永远不会重试,而且没关系。
但超时和/或 retryAfter 会被忽略。几分钟后,作业将被标记为失败。
我究竟做错了什么?另外,请问 timeout 和 retryAFtrer 有什么区别?!?
我的队列由主管管理,如下所示:
[program:projectname-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/appdemo.projectname.com/artisan queue:work redis --sleep=3 --tries=3
autostart=true
autorestart=true
user=www-data
numprocs=1
redirect_stderr=true
stdout_logfile=/var/www/appdemo.projectname.com/storage/logs/laravel_worker.log
Run Code Online (Sandbox Code Playgroud)
这是 Lararavel 文档中建议的配置。
public $timeout = 3600仅当您使用 运行队列时才有效queue:work,但如果使用 则无效queue:listen。
此外,在worker级别上,您--timeout可以使用参数在工作级别上指定超时,而不仅仅是在作业级别上,如下所示php artisan queue:work --timeout=3600。
但是,您绝对应该考虑为耗时的作业建立一个单独的队列,以便该作业应该在另一个队列上排队,但所有其他不耗时的作业可以在一个队列上运行。
https://laravel.com/docs/7.x/queues#customizing-the-queue-and-connection
此外,timeout定义该作业应运行多长时间,并retryAfter指定在多长时间后应尝试再次运行它。当然tries需要设置为更高的值,这样就可以重试。
希望这可以帮助。
| 归档时间: |
|
| 查看次数: |
8550 次 |
| 最近记录: |