Lưu giữ Nhiệm vụ

Mặc định, sau khi một nhiệm vụ được xử lý thành công bởi Handler (tức là Handler.ProcessTask trả về nil), nhiệm vụ sẽ được loại bỏ khỏi hàng đợi. Tuy nhiên, nếu bạn muốn nhiệm vụ được giữ lại trong hàng đợi sau khi hoàn thành (ví dụ, cho mục đích kiểm tra), bạn có thể chỉ định một khoảng thời gian giữ lại cho nhiệm vụ.

Dưới đây là một ví dụ về việc sử dụng tùy chọn Retention để chỉ định rằng một nhiệm vụ nên được giữ lại trong hàng đợi trong 24 giờ sau khi hoàn thành.

// Đặt tùy chọn khi khởi tạo nhiệm vụ.
task := asynq.NewTask("nhiệm_vụ_của_tôi", payload, asynq.Retention(24 * time.Hour))

// Hoặc, đặt tùy chọn khi đưa nhiệm vụ vào hàng đợi.
info, err := client.Enqueue(task, asynq.Retention(24 * time.Hour))

Sau khi đặt tùy chọn này, bạn sẽ có thể xem các nhiệm vụ đã hoàn thành bằng cách sử dụng CLI hoặc Giao diện người dùng Web.

Kết quả của Nhiệm vụ

Nếu bạn cần lưu trữ một số dữ liệu liên quan đến nhiệm vụ trong quá trình xử lý nhiệm vụ, và nếu dữ liệu này chỉ cần thiết trong vòng đời của nhiệm vụ (tức là cho đến khi nhiệm vụ bị loại bỏ khỏi hàng đợi), bạn có thể lưu trữ dữ liệu cùng với nhiệm vụ.

Sử dụng ResultWriter để ghi dữ liệu vào redis và liên kết dữ liệu đã ghi với nhiệm vụ.

Lưu ý: Vui lòng cân nhắc kỹ lượng dữ liệu được ghi vào redis. Nếu cần lưu trữ một lượng lớn dữ liệu, tốt hơn hãy sử dụng hệ thống lưu trữ dựa trên đĩa như cơ sở dữ liệu SQL.

// Trong mã xử lý.
func MyHandler(ctx context.Context, task *asynq.Task) error {
    res, err := DoStuff(ctx, task)
    if err != nil {
        return fmt.Errorf("không thể xử lý nhiệm vụ: %v", err)
    }
    if _, err := task.ResultWriter().Write(res); err != nil {
        return fmt.Errorf("không thể ghi kết quả nhiệm vụ: %v", err)
    }
    return nil
}

Nếu bạn sử dụng tùy chọn Retention như đã nêu ở trên, bạn sẽ có thể xem dữ liệu kết quả thông qua CLI và Giao diện người dùng Web. Ngoài ra, bạn cũng có thể truy cập dữ liệu kết quả theo cách tự động thông qua việc sử dụng Inspector.GetTaskInfoInspector.ListCompletedTasks.