작업 보유 기간

기본적으로 Handler가 작업을 성공적으로 처리하면 (즉, Handler.ProcessTask가 nil을 반환하는 경우), 작업은 큐에서 제거됩니다. 그러나 작업을 완료한 후에도 (예: 검사 목적으로) 계속해서 큐에 유지하려면 작업의 보유 기간을 지정할 수 있습니다.

아래는 작업 완료 후 24시간 동안 큐에 보관되어야 하는 작업을 지정하는 Retention 옵션을 사용하는 예시입니다.

// 작업을 초기화할 때 옵션 설정.
task := asynq.NewTask("my_task", payload, asynq.Retention(24 * time.Hour))

// 또는 작업을 큐에 넣을 때 옵션 설정.
info, err := client.Enqueue(task, asynq.Retention(24 * time.Hour))

이 옵션을 설정한 후에는 CLI 또는 Web UI를 사용하여 완료된 작업을 확인할 수 있어야 합니다.

작업 결과

작업 처리 중 작업과 관련된 일부 데이터를 저장해야 하고, 이 데이터가 작업의 수명 주기 동안만 필요한 경우에는 데이터를 작업과 함께 저장할 수 있습니다.

ResultWriter를 사용하여 데이터를 redis에 작성하고 작성된 데이터를 작업과 연결합니다.

참고: redis에 작성되는 데이터 양을 신중하게 고려하십시오. 대량의 데이터를 저장해야 하는 경우 SQL 데이터베이스와 같은 디스크 기반 저장 시스템을 사용하는 것이 좋습니다.

// 핸들러 코드에서.
func MyHandler(ctx context.Context, task *asynq.Task) error {
    res, err := DoStuff(ctx, task)
    if err != nil {
        return fmt.Errorf("작업을 처리하지 못했습니다: %v", err)
    }
    if _, err := task.ResultWriter().Write(res); err != nil {
        return fmt.Errorf("작업 결과를 작성하지 못했습니다: %v", err)
    }
    return nil
}

위에서 보여진 Retention 옵션을 사용하는 경우 CLI 및 Web UI를 통해 결과 데이터를 확인할 수 있을 뿐 아니라 Inspector.GetTaskInfoInspector.ListCompletedTasks를 사용하여 결과 데이터에 프로그래밍 방식으로 액세스할 수 있습니다.