작업, 크론 및 데드-레터 큐
요청 외부에서 작업을 실행하는 방법: 작업이 무엇인지, 작업을 재시도하는 방법, cron이 작업을 생성하는 방법, 종료된 작업을 처리하는 방법.
1. 작업 대기열에 넣기
작업은 함수에 대한 하나의 백그라운드 호출입니다. service_role 키를 사용하여 서버에서 대기열에 넣습니다.
| 옵션 | 기본값 | 의미 |
|---|---|---|
payload | null | 요청 본문으로 함수에 JSON이 제공됨 |
delaySecs | 0 | 첫 번째 시도 전에 대기하는 시간(초)입니다. 그때까지 작업은 pending로 유지됩니다. |
maxAttempts | 3 | 총 시도 횟수(첫 번째 시도 포함) |
getJob(id) 또는 listJobs({ status, limit })(limit 는 1에서 500 사이, 기본값은 50)를 사용하여 작업을 다시 읽습니다. 작업에는 status, attempts, max_attempts, error 및 날짜 scheduled_at, started_at, completed_at이 있습니다.
enqueueJob, getJob 및 listJobs에는 service_role 키가 필요합니다. 공개 키는 403를 받습니다.
2. 귀하의 기능이 수신하는 것
작업은 다른 요청과 마찬가지로 함수를 호출하며 처리해야 하는 세 가지 차이점이 있습니다.
| 부품 | 가치 |
|---|---|
| 방법 | JOB ( POST아님) |
| 경로 | /jobs/<job id> |
| 본체 | 작업의 payload(JSON) |
| ID 헤더 | 없음: x-aura-role 및 x-aura-user-id이 없습니다. |
실제 통화는 {"method":"JOB","path":"/jobs/d443d541-…","role":null,"userId":null,"body":"{\"items\":[\"a\",\"b\"],\"order\":42}"}에 기록되었습니다.
작업은 사용자 없이 실행됩니다. x-aura-user-id에 의존하지 마십시오. 저작물이 사용자의 것인 경우 페이로드에 사용자의 ID를 넣습니다.
3. 수명 주기 및 재시도
- 작업은 한 번 이상 실행됩니다. 작업자가 실행 중에 중지하면 두 번 실행될 수 있으므로 함수를 멱등성으로 만드세요.
- 실패한 시도는
maxAttempts에 도달할 때까지 5초의 고정된 지연 후에 다시 시도됩니다. 그러면 작업은dead입니다. 지연 및 기본 시도 횟수는 서비스 설정(JOB_RETRY_DELAY_SECS,JOB_MAX_RETRIES)입니다. - 임대(기본적으로 450초) 후에도 여전히
running상태인 작업은 서비스에 의해 회수됩니다. - 완료된 작업은 기본적으로 14일 동안 보관됩니다.
상태 코드에 관계없이 함수가 응답하는 즉시 작업은 completed입니다. 실제 실행에서는 500를 반환한 함수가 한 번 시도한 후 completed 작업을 생성했으며 다시 시도되지 않았습니다.
작업이 실패하고 호출 자체가 실패한 경우에만 다시 시도됩니다. 즉, 함수가 없거나 비활성 상태이거나 런타임에 연결할 수 없거나 호출 시간이 초과되었습니다. 자신의 코드에서 오류가 감지되었을 때 재시도하려면 상태 코드에 의존하는 대신 처리기(백오프용 delaySecs 사용)에서 새 작업을 대기열에 추가하세요.
동일한 실제 실행에서 존재하지 않는 함수에 대한 작업은 다음 순서를 거쳤습니다. 시도 1은 Fonction 'ghost' introuvable을 사용하여 3초에 실패하고, 시도 2는 약 9초에 실패했으며, 작업은 attempts가 max_attempts와 동일한 dead이 되었습니다.
4. 배달 못한 편지 대기열
죽은 작업은 대기열에 남아 있으며 나열되고 재시도될 수 있습니다. 이러한 경로에는 아직 SDK 메서드가 없습니다. service_role 키와 함께 HTTP를 사용하세요.
재시도는 시도 카운터를 재설정하지 않고 작업을 pending로 되돌리므로 정확히 한 번 더 시도하고 다시 실패하면 dead로 돌아갑니다. 다시 시도하기 전에 원인을 수정하세요(예: 누락된 기능 배포).
5. cron으로 예약하기
크론 항목은 함수 자체를 호출하지 않습니다. 함수가 실행될 때마다 작업을 대기열에 넣습니다.
- 일정에는 5개 필드 (
min hour day month weekday) 또는 6개 필드 (sec min hour day month weekday)가 있습니다. 5개 필드 일정은0초 앞에 표시됩니다.*/1 * * * *는0 */1 * * * *로 저장됩니다. @daily와 같은 별칭은 예상 형식을 명시하는400로 거부됩니다.- 시간은 UTC 기준입니다.
last_run및next_run은 첫 번째 실행 전까지null입니다. 실제 실행에서는 15:40에 생성된 일정이 15:41:00에 실행된 다음next_run15:42:00을 표시했습니다.- 항목을 생성하면 페이로드가 고정됩니다.
- 알 수 없는 이름을 삭제하면
404가 반환됩니다. 크론 항목을 삭제하면 실행도 중지됩니다. - SDK에는
getCronJob또는updateCronJob이 없습니다. 항목을 삭제하고 다시 만드십시오.
순수한 데이터베이스 작업의 경우 Postgres pg_cron 확장은 함수에 대한 왕복을 방지합니다. Cron 페이지를 참조하세요.