Ciclo de Vida da Tarefa
Tarefas assíncronas passam por vários estados durante seu ciclo de vida. Esta página registra o ciclo de vida de uma tarefa, desde a criação até a exclusão.
Quando você enfileira uma tarefa, o asynq gerencia a tarefa internamente para garantir que o manipulador seja chamado no horário especificado. Durante este processo, a tarefa pode passar por diferentes estados de ciclo de vida.
Aqui está uma lista de diferentes estados de ciclo de vida:
-
Agendado: A tarefa está aguardando processamento futuro (aplicável apenas a tarefas com opções
ProcessAt
ouProcessIn
). - Pendente: A tarefa está pronta para processamento e será selecionada por um trabalhador disponível.
- Ativo: A tarefa está sendo processada por um trabalhador (ou seja, o manipulador está processando a tarefa).
- Tentativa: O trabalhador não consegue processar a tarefa, e a tarefa está aguardando uma tentativa futura.
- Arquivado: A tarefa atingiu o número máximo de tentativas de repetição e está armazenada no arquivo para inspeção manual.
-
Concluído: A tarefa foi processada com sucesso e será retida até que o tempo de retenção expire (aplicável apenas a tarefas com a opção
Retenção
).
Vamos analisar os diferentes estados de ciclo de vida com um exemplo.
// Tarefa 1: Agendada para processamento em 24 horas.
client.Enfileirar(tarefa1, asynq.ProcessIn(24*time.Hour))
// Tarefa 2: Enfileirada para processamento imediato.
client.Enfileirar(tarefa2)
// Tarefa 3: Enfileirada com opção de retenção.
client.Enfileirar(tarefa3, asynq.Retention(2*time.Hour))
Neste exemplo, a Tarefa 1
permanecerá no estado Agendado pelas próximas 24 horas. Após 24 horas, ela fará a transição para o estado Pendente e depois para o estado Ativo. Se a tarefa for processada com sucesso, os dados da tarefa serão excluídos do Redis. Se a tarefa não for processada com sucesso (ou seja, o manipulador retorna um erro ou falha), a tarefa fará a transição para o estado Tentativa para tentativas posteriores. Após um período de tempo, a tarefa fará a transição de volta para o estado Pendente e depois para o estado Ativo. Este ciclo continuará até que a tarefa seja processada com sucesso ou esgote as tentativas de repetição. Neste último caso, a tarefa fará a transição para o estado Arquivado.
Neste exemplo, a única diferença entre Tarefa 2
e Tarefa 1
é que Tarefa 2
pula o estado Agendado e entra diretamente no estado Pendente.
Tarefa 3
é enfileirada com a opção de retenção de 2 horas. Isso significa que, depois que um trabalhador processar com sucesso a Tarefa 3
, a tarefa permanecerá no estado Concluído por 2 horas antes de ser removida da fila. Por padrão, se uma tarefa não tiver uma opção de retenção definida, ela será removida da fila imediatamente após a conclusão.
O diagrama abaixo ilustra as transições de estado.
+-------------+ +--------------+ +--------------+ +-------------+
| | | | | | Sucesso | |
| Agendado |----------->| Pendente |--------->| Ativo |---------> | Concluído |
| (Opcional) | | | | | | (Opcional) |
+-------------+ +--------------+ +--------------+ +-------------+
^ | |
| | | Exclusão
| | Falha |
| | V
| |
| |
+------+-------+ | +--------------+
| | | | |
| Tentativa |<--------------+------->| Arquivado |
| | | |
+--------------+ +--------------+