Utiliser la gestion des files d'attente et utiliser queue.yaml (comparaison)

Nous vous expliquons sur cette page les différences en matière de gestion des files d'attente entre l'utilisation de l'API Cloud Tasks et l'importation d'un fichier Cloud Tasks queue.yaml ou queue.xml. Elle aborde également certains des pièges liés à l'association de ces deux méthodes et donne des solutions pour résoudre les problèmes courants.

Présentation

L'API Cloud Tasks fournit une interface App Engine indépendante au service de file d'attente des tâches App Engine. Dans le cadre de cette interface, elle permet de gérer les files d'attente, y compris via la console ou la commande gcloud. Les files d'attente créées par l'API Cloud Tasks sont accessibles à partir du SDK App Engine et inversement. Pour maintenir la compatibilité, il est possible d'utiliser le fichier de configuration utilisé par le SDK App Engine, queue.yaml, pour créer et configurer des files d'attente à utiliser via l'API Cloud Tasks. Cependant, le fait de mélanger la configuration via un fichier avec la configuration via l'API Cloud Tasks peut avoir des conséquences inattendues.

Pièges liés au mélange de queue.yaml avec les méthodes de gestion des files d'attente Cloud Tasks

Pour le service sous-jacent, les fichiers queue.yaml sont définitifs. L'importation d'un fichier queue.yaml qui omet les files d'attente existantes dans le projet, quelle que soit la façon dont elles ont été créées, entraîne leur désactivation ou leur suspension. Ainsi, si vous utilisez l'API Cloud Tasks pour appeler CreateQueue ou UpdateQueue, puis importez un fichier queue.yaml qui les omet, les files d'attente créées dans les appels Cloud Tasks sont désactivées.

Imaginez le scénario suivant :

  1. Appelez CreateQueue pour créer une file d'attente nommée "cloud-tasks-queue".
  2. Importez un fichier queue.yaml contenant les éléments suivants :

    queue:
    - name: queue-yaml-queue
    

Quel est l'état actuel des files d'attente dans ce projet ? L'état de la file d'attente nommée "cloud-tasks-queue" et de toutes les autres files d'attente qui existaient auparavant est défini sur DISABLED. L'état de la file d'attente "queue-yaml-queue" est défini sur RUNNING.

Ce comportement peut être surprenant si vous créez des files d'attente via l'API Cloud Tasks. Les instructions ci-dessous expliquent comment réactiver une file d'attente désactivée.

De même, si une file d'attente est désactivée dans l'API Cloud Tasks, mais s'affiche ultérieurement dans un fichier queue.yaml importé, elle est réactivée.

Si une file d'attente est supprimée avec la méthode DeleteQueue et s'affiche ultérieurement dans un fichier queue.yaml, l'importation de queue.yaml peut échouer, car les noms de file d'attente ne peuvent pas être réutilisés pendant plusieurs jours après la suppression.

Bonnes pratiques

Si vous débutez dans Cloud Tasks ou App Engine, utilisez l'API Cloud Tasks exclusivement pour gérer vos files d'attente, et évitez d'utiliser queue.yaml et queue.xml. Les méthodes de gestion de files d'attente Cloud Tasks offrent aux utilisateurs plus de choix pour la création, la mise à jour et la suppression de files d'attente.

Toutefois, si vous savez utiliser les fichiers queue.yaml et queue.xml, vous ne devriez envisager de passer aux méthodes de gestion de files d'attente que si vous comprenez les pièges liés à l'association de queue.yaml avec les méthodes de gestion des files d'attente Cloud Tasks.

Pour favoriser l'utilisation d'une seule méthode de configuration, vous pouvez contrôler l'accès aux activités de gestion des files d'attente en utilisant des groupes et des autorisations. Consultez la section Sécuriser la configuration des files d'attente pour obtenir des instructions.

Débogage

Vous pouvez consulter les journaux d'audit de l'activité d'administration du projet pour récupérer l'historique des modifications apportées à la configuration des files d'attente, y compris les créations, les mises à jour et les suppressions des files d'attente :

    gcloud logging read \
      'protoPayload.methodName=
       (com.google.appengine.legacy.queue_created OR
        com.google.appengine.legacy.queue_updated OR
        google.cloud.tasks.v2.CloudTasks.CreateQueue OR
        google.cloud.tasks.v2.CloudTasks.UpdateQueue OR
        google.cloud.tasks.v2.CloudTasks.DeleteQueue)'

Par exemple, si une file d'attente existante est désactivée par une importation de queue.yaml, le message "File d'attente désactivée '[QUEUE_NAME]'" s'affiche dans le journal d'audit via la méthode com.google.appengine.legacy.queue_updated.

Réactiver une file d'attente désactivée par l'importation d'un fichier queue.yaml

Si vous associez les méthodes de gestion des files d'attente via le fichier queue.yaml et via l'API Cloud Tasks, l'importation d'un fichier queue.yaml risque de désactiver accidentellement une file d'attente créée via l'API Cloud Tasks.

Pour réactiver la file d'attente, vous pouvez soit appeler ResumeQueue dans la file d'attente, soit l'ajouter à queue.yaml, puis l'importer. Sachez que si vous avez défini un taux de traitement personnalisé (rate) dans la configuration queue.yaml de la file d'attente, l'appel ResumeQueue rétablit la valeur rate par défaut de la file d'attente. Cela se reflète dans le champ maxDispatchesPerSecond de la réponse à ResumeQueue.

Quota

Si vous utilisez queue.yaml pour créer vos files d'attente, vous pouvez créer par défaut un maximum de 100 files d'attente. Les files d'attente créées à l'aide de l'API Cloud Tasks ont une limite maximale de 1 000 files d'attente par défaut. Comme dans d'autres cas, l'association des méthodes queue.yaml et de l'API Cloud Tasks peut produire des résultats inattendus. Par exemple, supposons que vous créiez des files d'attente à l'aide de queue.yaml, puis que vous obteniez une augmentation de quota, par exemple de 2 000. Si vous utilisez ensuite la méthode de l'API Cloud Tasks pour créer des files d'attente supplémentaires, vous obtiendrez des erreurs de quota. Pour y remédier, envoyez une requête via Modifier les quotas à partir de la page "Quotas" de Cloud Console.

Autres informations sur les méthodes de gestion de files d'attente Cloud Tasks

Configuration des files d'attente et délai de démarrage des files d'attente

L'application des modifications apportées à la configuration des files d'attente peut prendre plusieurs minutes. Par exemple, après avoir appelé CreateQueue ou UpdateQueue, plusieurs minutes peuvent s'écouler avant que vous puissiez appeler CreateTask sur cette file d'attente.

Cloud Tasks et la file d'attente App Engine default

La file d'attente App Engine nommée "default" fait l'objet d'un traitement spécial dans le SDK App Engine et dans l'API Cloud Tasks.

Si la file d'attente default n'existe pas déjà, elle est créée dans les cas suivants :

  1. Lorsqu'une tâche est ajoutée pour la première fois à la file d'attente default à l'aide du SDK App Engine.
  2. Lorsqu'un fichier queue.yaml qui spécifie une file d'attente default est importé.
  3. Lorsque CreateQueue ou UpdateQueue est appelé pour créer la file d'attente default.

Pour préserver la compatibilité avec App Engine, Cloud Tasks applique les restrictions suivantes :

  1. Si une file d'attente nommée "default" est créée, il doit s'agir d'une file d'attente utilisant des tâches App Engine.
  2. Une fois la file d'attente default créée, les utilisateurs ne peuvent pas la supprimer.

Dans l'API Cloud Tasks, les éléments suivants s'appliquent également à la file d'attente default :

  1. L'API Cloud Tasks ne crée pas automatiquement la file d'attente default ni aucune autre file d'attente.
  2. Comme c'est le cas avec toute autre file d'attente, si vous appelez GetQueue sur la file d'attente default, une erreur de type "Introuvable" est générée si l'appel est effectué avant la création de la file d'attente.
  3. De même, la file d'attente default ne s'affiche pas dans le résultat de ListQueues avant sa création.
  4. La configuration de la file d'attente default peut être modifiée à l'aide de l'appel UpdateQueue.

Étapes suivantes