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 ou ProcessIn).
  • 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  |
                           |              |                        |              |
                           +--------------+                        +--------------+