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
.