Trang này sẽ giải thích cách cấu hình ưu tiên xử lý nền với asynq để đáp ứng nhu cầu của bạn.

Ưu Tiên có Trọng Số

Theo mặc định, Server sẽ tạo một hàng đợi có tên là "mặc định" để xử lý tất cả các nhiệm vụ.

Nếu bạn cần gán ưu tiên cho mỗi nhiệm vụ, bạn có thể tạo nhiều hàng đợi với các cấp độ ưu tiên khác nhau.

Ví dụ:

srv := asynq.NewServer(redis, asynq.Config{
    Concurrency: 10,
    Queues: map[string]int{
        "critical": 6,
        "default":  3,
        "low":      1,
    },
})

Điều này sẽ tạo một phiên bản của Background với ba hàng đợi: critical, default, và low. Số liên kết với tên hàng đợi đại diện cho cấp độ ưu tiên của các hàng đợi.

Dựa trên cấu hình trên:

  • Nhiệm vụ trong hàng đợi critical sẽ được xử lý 60% thời gian
  • Nhiệm vụ trong hàng đợi default sẽ được xử lý 30% thời gian
  • Nhiệm vụ trong hàng đợi low sẽ được xử lý 10% thời gian

Bây giờ khi chúng ta có nhiều hàng đợi với các cấp độ ưu tiên khác nhau, chúng ta có thể chỉ định hàng đợi nào được sử dụng khi lên lịch nhiệm vụ.

Ví dụ:

client := asynq.NewClient(redis)
task := asynq.NewTask("send_notification", map[string]interface{}{"user_id": 42})

// Sử dụng tùy chọn `asynq.Queue` để chỉ định một nhiệm vụ sử dụng hàng đợi "critical".
err := client.Enqueue(task, asynq.Queue("critical"))

// Theo mặc định, nhiệm vụ sẽ được đưa vào hàng đợi "default".
err = client.Enqueue(task)

Với lệnh asynq stats, chúng ta có thể kiểm tra các hàng đợi.

Bạn có thể xem số nhiệm vụ trong mỗi hàng đợi trong phần "QUEUES" của kết quả đầu ra.

Ưu Tiên Nghiêm Ngặt

Nếu bạn cần tạo nhiều hàng đợi và muốn tất cả các nhiệm vụ trong một hàng đợi được xử lý với ưu tiên cao hơn, bạn có thể sử dụng tùy chọn StrictPriority.

Ví dụ:

srv := asynq.NewServer(redis, asynq.Config{
    Concurrency: 10,
    Queues: map[string]int{
        "critical": 3,
        "default":  2,
        "low":      1,
    },
    StrictPriority: true, // Chế độ nghiêm ngặt!
})

Điều này sẽ tạo một phiên bản của Background với ba hàng đợi và ưu tiên nghiêm ngặt: critical, default, và low. Trong chế độ ưu tiên nghiêm ngặt, các hàng đợi có ưu tiên cao hơn sẽ luôn được xử lý trước, và các hàng đợi ưu tiên thấp hơn sẽ chỉ được xử lý nếu tất cả các hàng đợi ưu tiên cao hơn khác đều trống.

Do đó, trong ví dụ này, nhiệm vụ trong hàng đợi critical sẽ luôn được xử lý trước. Nếu hàng đợi critical trống rỗng, hàng đợi default sẽ được xử lý. Nếu cả hai hàng đợi criticaldefault đều trống rỗng, hàng đợi low sẽ được xử lý.