Vòng Đời Của Nhiệm Vụ

Các nhiệm vụ bất đồng bộ trải qua nhiều trạng thái khác nhau trong suốt vòng đời của chúng. Trang này ghi lại vòng đời của một nhiệm vụ từ khi tạo đến khi xóa.

Khi bạn đưa một nhiệm vụ vào hàng đợi, asynq quản lý nhiệm vụ bên trong để đảm bảo rằng xử lý được gọi vào thời gian đã chỉ định. Trong quá trình này, nhiệm vụ có thể trải qua các trạng thái vòng đời khác nhau.

Dưới đây là danh sách các trạng thái vòng đời khác nhau:

  • Đã Lên Lịch: Nhiệm vụ đang chờ xử lý trong tương lai (chỉ áp dụng cho các nhiệm vụ với tùy chọn ProcessAt hoặc ProcessIn).
  • Đang Chờ Xử Lý: Nhiệm vụ đã sẵn sàng để xử lý và sẽ được một worker trống lấy đi.
  • Đang Xử Lý: Nhiệm vụ đang được một worker xử lý (tức là xử lý đang xử lý nhiệm vụ).
  • Thử Lại: Worker không thể xử lý nhiệm vụ và nhiệm vụ đang chờ đợi cho một lần thử lại trong tương lai.
  • Đã Lưu Trữ: Nhiệm vụ đã đạt số lần thử lại tối đa và được lưu trữ trong bộ lưu trữ để kiểm tra thủ công.
  • Hoàn Thành: Nhiệm vụ đã được xử lý thành công và sẽ được giữ lại cho đến khi thời gian giữ lại hết hạn (chỉ áp dụng cho các nhiệm vụ có tùy chọn Retention).

Hãy xem qua các trạng thái vòng đời khác nhau với một ví dụ.

// Nhiệm vụ 1: Lên lịch để xử lý trong 24 giờ.
client.Enqueue(task1, asynq.ProcessIn(24*time.Hour))

// Nhiệm vụ 2: Đưa vào hàng đợi để xử lý ngay lập tức.
client.Enqueue(task2)

// Nhiệm vụ 3: Đưa vào hàng đợi với tùy chọn giữ lại.
client.Enqueue(task3, asynq.Retention(2*time.Hour))

Trong ví dụ này, Nhiệm vụ 1 sẽ ở trạng thái Đã Lên Lịch trong 24 giờ tới. Sau 24 giờ, nó sẽ chuyển sang trạng thái Đang Chờ Xử Lý sau đó mới đến trạng thái Đang Xử Lý. Nếu nhiệm vụ được xử lý thành công, dữ liệu nhiệm vụ sẽ bị xóa khỏi Redis. Nếu nhiệm vụ không được xử lý thành công (tức là xử lý trả về lỗi hoặc gặp sự cố), nhiệm vụ sẽ chuyển sang trạng thái Thử Lại để thử lại sau này. Sau một khoảng thời gian, nhiệm vụ sẽ chuyển trở lại trạng thái Đang Chờ Xử Lý và sau đó là trạng thái Đang Xử Lý. Chu kỳ này sẽ tiếp tục cho đến khi nhiệm vụ được xử lý thành công hoặc cạn kiệt số lần thử lại. Trong trường hợp sau cùng, nhiệm vụ sẽ chuyển sang trạng thái Đã Lưu Trữ.

Trong ví dụ này, sự khác biệt duy nhất giữa Nhiệm vụ 2Nhiệm vụ 1Nhiệm vụ 2 bỏ qua trạng thái Đã Lên Lịch và trực tiếp chuyển vào trạng thái Đang Chờ Xử Lý.

Nhiệm vụ 3 được đưa vào hàng đợi với tùy chọn giữ lại là 2 giờ. Điều này có nghĩa là sau khi một worker xử lý Nhiệm vụ 3 thành công, nhiệm vụ sẽ ở trạng thái Hoàn Thành trong 2 giờ trước khi bị xóa khỏi hàng đợi. Mặc định, nếu một nhiệm vụ không có tùy chọn giữ lại được đặt, nó sẽ bị xóa khỏi hàng đợi ngay sau khi hoàn thành.

Sơ đồ dưới đây minh họa các chuyển đổi trạng thái.

+-------------+            +--------------+          +--------------+           +-------------+
|             |            |              |          |              | Thành Công |             |
|  Đã Lên Lịch|----------->|Đang Chờ Xử Lý|--------->|    Đang Xử Lý |---------> |   Hoàn Thành|
|  (Tùy Chọn) |            |              |          |              |           |  (Tùy Chọn) |
+-------------+            +--------------+          +--------------+           +-------------+
                                  ^                       |                            |
                                  |                       |                            | Xóa
                                  |                       | Thất Bại                   |
                                  |                       |                            V
                                  |                       |
                                  |                       |
                           +------+-------+               |        +--------------+
                           |              |               |        |              |
                           |    Thử Lại   |<--------------+------->|   Đã Lưu Trữ |
                           |              |                        |              |
                           +--------------+                        +--------------+