laravel has been attempted too many times or run too long. The job may have previously timed out error fix
저는 Laravel의 Queue timeout 문제를 겪었어요. 해결책은 'retry_after' 값을 적절히 조정하는 거였죠. 자세한 해결 과정이 궁금하다면 클릭해보세요!
음냐음냐..
laravel has been attempted too many times or run too long. The job may have previously timed out에러가 발생했다 !
뭐,, 이리저리 다 찾아보고.. 다 해봤지만 해결이 안됬고, 원인을 찾고보니. 90초 후에 저렇게 떴다, 하지만 Queue는 정상적으로 처리 !
와,, 도대체 로그에 쓸데없이 쌓이는건가? 왜지??? 싶어 계속 찾아보았다..
나는 Queue 작업이 생각보다 3~5분 동안 진행되는 작업이였고,
구글링 해본 결과 redis 로 바뀌면 해결된다 해서, 큐를 redis로 바꾸어보았다.
하지만, 여전히 발생하는 것 !
https://divinglaravel.com/prevent-your-queued-jobs-from-duplicating
그 이후에 찾은거긴 하지만, 저 위 메세지가 뜨는 이유는 딱 하나다.
'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => env('REDIS_QUEUE', 'default'),
'retry_after' => 90,
'block_for' => null,
'after_commit' => false,
],위 config/queue.php 에서 redis retry_after 이 90으로 되어 있을텐데.
(아 ~ 또 이미지 안올라가,,, 워드프레스 권한문제 어떠케하누)
바로 여기서,, 생기는 문제가 이것이다.. redis 에서 queues:default:reserved를 받았을때 score, 즉 만료시간이 90초가 된다는 의미이다.
즉, redis에 queue가 reserved 되어 올라갈때, 최종 만료시간이 90초 (무조건 고정인듯, queue.php 에 설정한 값 retry_after 그대로...
그래서 찾아보니, 7버젼대에는 이런것이 있고.
8버젼대에는
https://laravel.com/docs/8.x/queues#throttling-exceptions
로 바뀌긴 한거 같지만..
어쨌든 위 두 값을 백날 설정해봐야, redis queue.php 에 설정한 retry_after 값보다 낮다면, 문제가 생긴다는거다.
위 두 옵션 값이나, queue를 실행할때 사용하는 timeout 값보다 무조건 retry_after 값이 크게 설정을 해놔야 한다.
queue를 사용하면서 이제까지 이거 하나 몰랐다니,, 나원...
또한... 굳이 retry_after 를 설정하지 않고, 각 queue마다 timeout이 모두 다를텐데... 각 queue마다 retry_after 를 설정할 수는 없는걸까 ? 흐음... 분명 있는것 같으면서도 없는것 같기도하고... 더 찾아보면 나올지도 모르겠지만, 구글링 해본 결과 없는것? 같기도 하다...
그래서 나는 queue:work 에 --timeout 1800 옵션을 주기 때문에,
queue.php redis 의 retry_after 값을 1860으로 수정해주었다...