Louer des tâches de retrait

Lorsque des tâches sont dans une file d'attente, un nœud de calcul peut les louer. Une fois les tâches traitées, le nœud de calcul doit les supprimer.

Avant de commencer

Contexte important

  • Cette méthode est uniquement applicable aux nœuds de calcul qui s'exécutent au sein d'un service dans l'environnement standard.
  • Lorsque vous utilisez des files d'attente de retrait, vous êtes responsable du scaling de vos nœuds de calcul en fonction de votre volume de traitement.

Louer des tâches

Lorsque les tâches sont dans une file d'attente, un nœud de calcul peut en louer une ou plusieurs avec la méthode leaseTasks(). Il peut y avoir un léger délai avant que les tâches récemment ajoutées à l'aide de add() soient disponibles via leaseTasks().

Pour effectuer une demande de bail, vous devez spécifier le nombre de tâches à louer (1 000 tâches maximum) et la durée du bail en secondes (maximum une semaine). La durée du bail doit être suffisamment longue pour que la tâche la plus lente puisse se terminer. Vous pouvez modifier la durée de bail d'une tâche à l'aide de modifyTaskLease().

Louer une tâche empêche qu'elle soit traitée par un autre processus, et cette tâche reste indisponible jusqu'à la fin du bail.

L'exemple de code suivant alloue des tâches de la file d'attente pull-queue pendant une heure :

List<TaskHandle> tasks = q.leaseTasks(3600, TimeUnit.SECONDS, numberOfTasksToLease);

Traitement par lots avec des tags de tâches

Toutes les tâches ne se ressemblent pas ; votre code peut ajouter des "tags" aux tâches, puis choisir des tâches à louer par tag. Le tag agit comme un filtre.

q.add(
    TaskOptions.Builder.withMethod(TaskOptions.Method.PULL)
        .payload(content.toString())
        .tag("process".getBytes()));

Puis, louez les tâches filtrées :

// Lease only tasks tagged with "process"
List<TaskHandle> tasks =
    q.leaseTasksByTag(3600, TimeUnit.SECONDS, numberOfTasksToLease, "process");
// You can also specify a tag to lease via LeaseOptions passed to leaseTasks.

Réguler les interrogations

Les nœuds de calcul qui interrogent la file d'attente pour les tâches à louer doivent détecter s'ils essaient de louer des tâches plus rapidement que la file ne peut les fournir. En cas d'échec, les exceptions suivantes de leaseTasks() peuvent être générées :


Votre code doit intercepter ces exceptions, annuler l'appel de leaseTasks(), puis réessayer plus tard. Pour éviter ce problème, vous pouvez définir un délai RPC plus long lorsque vous appelez leaseTasks(). Vous devez également arrêter temporairement les appels lorsqu'une demande de bail renvoie une liste de tâches vide.

Si vous générez plus de 10 demandes de bail de tâches par file d'attente et par seconde, seules les 10 premières demandes renverront des résultats. Si le nombre de requêtes dépasse cette limite, OK est renvoyé sans résultat.

Surveiller des tâches dans la console Google Cloud

Pour afficher des informations sur toutes les tâches et les files d’attente de votre application :

  1. Ouvrez la page Cloud Tasks dans la console Google Cloud et recherchez la valeur Pull dans la colonne Type.

    Accéder à Cloud Tasks

  2. Cliquez sur le nom de la file qui vous intéresse et ouvrez la page des détails de la file. Toutes les tâches de la file d'attente sélectionnée sont affichées.

Supprimer des tâches

Une fois qu'un nœud de calcul a terminé une tâche, il doit la supprimer de la file d'attente. Si vous voyez des tâches restant dans une file d'attente après qu'un nœud de calcul a fini de les traiter, il est probable que ce dernier a échoué. Dans ce cas, les tâches seront traitées par un autre nœud de calcul.

Vous pouvez supprimer une tâche individuelle ou une liste de tâches en utilisant deleteTask(). Pour pouvoir supprimer une tâche, vous devez connaître son nom. Vous pouvez trouver les noms de tâches dans l'objet Task object renvoyé par leaseTasks().

L'exemple de code suivant indique comment supprimer une tâche d'une file d'attente :

q.deleteTask(task);