Retenção da Tarefa

Por padrão, uma vez que uma tarefa é processada com sucesso pelo Handler (ou seja, o Handler.ProcessTask retorna nil), a tarefa será removida da fila. No entanto, se desejar que a tarefa seja retida na fila após a conclusão (por exemplo, para fins de inspeção), você pode especificar um período de retenção para a tarefa.

Abaixo está um exemplo de uso da opção Retention para especificar que uma tarefa deve ser retida na fila por 24 horas após a conclusão.

// Defina a opção ao inicializar a tarefa.
tarefa := asynq.NewTask("minha_tarefa", carga, asynq.Retention(24 * time.Hour))

// Alternativamente, defina a opção ao enfileirar a tarefa.
info, err := cliente.Enfileirar(tarefa, asynq.Retention(24 * time.Hour))

Após definir esta opção, você deve ser capaz de ver as tarefas concluídas usando a CLI ou a interface web.

Resultado da Tarefa

Se precisar armazenar alguns dados relacionados à tarefa durante o processamento da tarefa, e se esses dados só forem necessários durante o ciclo de vida da tarefa (ou seja, até que a tarefa seja removida da fila), você pode armazenar os dados juntamente com a tarefa.

Use ResultWriter para escrever dados no redis e associar os dados escritos com a tarefa.

Nota: Por favor, considere cuidadosamente a quantidade de dados escrita no redis. Se uma grande quantidade de dados precisar ser armazenada, é melhor usar um sistema de armazenamento baseado em disco, como um banco de dados SQL.

// No código do handler.
func MeuHandler(ctx context.Context, tarefa *asynq.Task) error {
    res, err := FazerAlgo(ctx, tarefa)
    if err != nil {
        return fmt.Errorf("falha ao processar a tarefa: %v", err)
    }
    if _, err := tarefa.ResultWriter().Write(res); err != nil {
        return fmt.Errorf("falha ao escrever o resultado da tarefa: %v", err)
    }
    return nil
}

Se usar a opção Retention como mostrado acima, você poderá visualizar os dados de resultado através da CLI e da interface web. Além disso, pode acessar programaticamente os dados de resultado através do uso de Inspector.GetTaskInfo e Inspector.ListCompletedTasks.