Cette page expliquera comment configurer la priorité du traitement en arrière-plan avec asynq
pour répondre à vos besoins.
Priorité pondérée
Par défaut, Server
créera une file nommée "default" pour traiter toutes les tâches.
Si vous devez attribuer des priorités à chaque tâche, vous pouvez créer plusieurs files avec différents niveaux de priorité.
Exemple :
srv := asynq.NewServer(redis, asynq.Config{
Concurrency: 10,
Queues: map[string]int{
"critical": 6,
"default": 3,
"low": 1,
},
})
Cela créera une instance de Background
avec trois files : critical, default et low. Les chiffres associés aux noms des files représentent le niveau de priorité des files.
Selon la configuration ci-dessus :
- Les tâches de la file critical seront traitées 60 % du temps
- Les tâches de la file default seront traitées 30 % du temps
- Les tâches de la file low seront traitées 10 % du temps
Maintenant que nous avons plusieurs files avec différents niveaux de priorité, nous pouvons spécifier quelle file utiliser lors de la planification des tâches.
Exemple :
client := asynq.NewClient(redis)
task := asynq.NewTask("send_notification", map[string]interface{}{"user_id": 42})
// Utilisez l'option `asynq.Queue` pour spécifier une tâche à utiliser la file "critical".
err := client.Enqueue(task, asynq.Queue("critical"))
// Par défaut, les tâches seront mises en file dans la file "default".
err = client.Enqueue(task)
Avec la commande asynq stats
, nous pouvons vérifier les files.
Vous pouvez voir le nombre de tâches dans chaque file dans la section "QUEUES" de la sortie.
Priorité stricte
Si vous avez besoin de créer plusieurs files et que vous voulez que toutes les tâches dans une file soient traitées avec une priorité plus élevée, vous pouvez utiliser l'option StrictPriority
.
Exemple :
srv := asynq.NewServer(redis, asynq.Config{
Concurrency: 10,
Queues: map[string]int{
"critical": 3,
"default": 2,
"low": 1,
},
StrictPriority: true, // Mode strict !
})
Cela créera une instance de Background
avec trois files et une priorité stricte : critical, default et low. En mode priorité stricte, les files avec une priorité plus élevée seront toujours traitées en premier, et les files de priorité inférieure ne seront traitées que si toutes les autres files de priorité plus élevée sont vides.
Par conséquent, dans cet exemple, les tâches dans la file critical seront toujours traitées en premier. Si la file critical est vide, la file default sera traitée. Si à la fois les files critical et default sont vides, la file low sera traitée.