Diese Seite erklärt, wie Sie die Priorisierung der Hintergrundverarbeitung mit asynq
konfigurieren können, um Ihren Anforderungen gerecht zu werden.
Gewichtete Priorität
Standardmäßig erstellt Server
eine Warteschlange mit dem Namen “default” zur Verarbeitung aller Aufgaben.
Wenn Sie jeder Aufgabe Prioritäten zuweisen müssen, können Sie mehrere Warteschlangen mit unterschiedlichen Prioritätsstufen erstellen.
Beispiel:
srv := asynq.NewServer(redis, asynq.Config{
Concurrency: 10,
Queues: map[string]int{
"critical": 6,
"default": 3,
"low": 1,
},
})
Dies erstellt eine Instanz von Background
mit drei Warteschlangen: critical, default und low. Die mit den Warteschlangennamen verbundenen Zahlen repräsentieren die Prioritätsstufe der Warteschlangen.
Basierend auf der obigen Konfiguration:
- Aufgaben in der critical-Warteschlange werden 60% der Zeit verarbeitet
- Aufgaben in der default-Warteschlange werden 30% der Zeit verarbeitet
- Aufgaben in der low-Warteschlange werden 10% der Zeit verarbeitet
Nun, da wir mehrere Warteschlangen mit unterschiedlichen Prioritätsstufen haben, können wir angeben, welche Warteschlange beim Planen von Aufgaben verwendet werden soll.
Beispiel:
client := asynq.NewClient(redis)
task := asynq.NewTask("send_notification", map[string]interface{}{"user_id": 42})
// Verwenden Sie die `asynq.Queue`-Option, um eine Aufgabe für die Verwendung der "critical"-Warteschlange anzugeben.
err := client.Enqueue(task, asynq.Queue("critical"))
// Standardmäßig werden Aufgaben in die "default"-Warteschlange eingereiht.
err = client.Enqueue(task)
Mit dem asynq stats
-Befehl können wir die Warteschlangen überprüfen.
Sie können die Anzahl der Aufgaben in jeder Warteschlange im Abschnitt “QUEUES” der Ausgabe anzeigen.
Strenge Priorität
Wenn Sie mehrere Warteschlangen erstellen müssen und möchten, dass alle Aufgaben in einer Warteschlange mit höherer Priorität verarbeitet werden, können Sie die StrictPriority
-Option verwenden.
Beispiel:
srv := asynq.NewServer(redis, asynq.Config{
Concurrency: 10,
Queues: map[string]int{
"critical": 3,
"default": 2,
"low": 1,
},
StrictPriority: true, // Strenge Priorität aktiviert!
})
Dies erstellt eine Instanz von Background
mit drei Warteschlangen und strenger Priorität: critical, default und low. Im strengen Prioritätsmodus werden Warteschlangen mit höherer Priorität immer zuerst verarbeitet, und Warteschlangen mit niedrigerer Priorität werden nur verarbeitet, wenn alle anderen Warteschlangen mit höherer Priorität leer sind.
Daher werden in diesem Beispiel Aufgaben in der critical-Warteschlange immer zuerst verarbeitet. Wenn die critical-Warteschlange leer ist, wird die default-Warteschlange verarbeitet. Wenn sowohl die critical- als auch die default-Warteschlange leer sind, wird die low-Warteschlange verarbeitet.