一架梯子,一头程序猿,仰望星空!
Asynq任务队列教程 > 内容正文

Task生命周期


异步任务在其生命周期中经历了多个状态。本页面记录了任务的从创建到删除的生命周期。

任务生命周期

当您将任务加入队列时,asynq内部管理任务,以确保在指定时间调用处理程序处理任务。在此过程中,任务可能经历不同的生命周期状态。

以下是不同生命周期状态的列表:

  • Scheduled:任务正在等待未来处理(仅适用于具有ProcessAtProcessIn选项的任务)。
  • Pending:任务已准备好进行处理,并将由一个空闲的工作器接收。
  • Active:任务正在被工作器处理(即处理程序正在处理该任务)。
  • Retry:工作器无法处理任务,任务正在等待将来重试。
  • Archived:任务达到最大重试次数,并存储在归档中以供手动检查。
  • Completed:任务已成功处理,并保留到保留时间到期为止(仅适用于具有Retention选项的任务)。

我们使用一个例子来看不同的生命周期状态。

// 任务1:安排在24小时后处理。
client.Enqueue(task1, asynq.ProcessIn(24*time.Hour))

// 任务2:立即放入队列处理。
client.Enqueue(task2)

// 任务3:带有保留选项入队。
client.Enqueue(task3, asynq.Retention(2*time.Hour))

在这个例子中,任务1将在未来的24小时内保持在已安排状态。24小时后,它将转换为待处理状态,然后转换为活动状态。如果任务成功处理,则任务数据将从Redis中删除。如果任务未成功处理(即处理程序返回错误或发生恐慌),则任务将转换为重试状态以便稍后重试。在一段时间后,任务将再次转换为待处理状态,然后转换为活动状态。此循环将持续进行,直到任务成功处理或任务耗尽重试次数为止。在后一种情况下,任务将转换为已归档状态。

在这个例子中,任务2任务1的唯一区别在于任务2将跳过已安排状态,直接进入待处理状态。

任务3以2小时的保留选项入队。这意味着在一个工作器成功处理了任务3之后,任务将保持在已完成状态的队列中,持续2小时,然后从队列中删除。默认情况下,如果任务没有设置保留选项,那么任务在完成后将立即被删除。

下图显示了状态转换的图示。

+-------------+            +--------------+          +--------------+           +-------------+
|             |            |              |          |              | Success   |             |
|  Scheduled  |----------->|   Pending    |--------->|    Active    |---------> |  Completed  |
|  (Optional) |            |              |          |              |           |  (Optional) |
+-------------+            +--------------+          +--------------+           +-------------+
                                  ^                       |                            |
                                  |                       |                            | Deletion
                                  |                       | Failed                     |
                                  |                       |                            V
                                  |                       |
                                  |                       |
                           +------+-------+               |        +--------------+
                           |              |               |        |              |
                           |    Retry     |<--------------+------->|   Archived   |
                           |              |                        |              |
                           +--------------+                        +--------------+