음냐음냐..

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 그대로…

https://laravel.kr/docs/7.x/queues#%EC%8B%A4%ED%8C%A8%ED%95%9C%20Job%20%EC%B2%98%EB%A6%AC%ED%95%98%EA%B8%B0

그래서 찾아보니, 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으로 수정해주었다…