Créer des files d'attente d'envoi

Cette page explique comment créer et personnaliser une file d'attente d'envoi et comment examiner le contenu d'une file d'attente.

Utiliser un fichier de configuration de file d'attente pour créer des files d'attente

Pour traiter une tâche, vous devez l'ajouter à une file d'attente. App Engine propose une file d'attente d'envoi par défaut, nommée default, qui est configurée et prête à être utilisée avec les paramètres par défaut. Si vous le souhaitez, vous pouvez simplement ajouter toutes vos tâches à la file d'attente par défaut, sans avoir à créer et configurer d'autres files d'attente.

Pour ajouter des files d'attente ou changer la configuration par défaut, modifiez le fichier de configuration de file d'attente de votre application, que vous transférerez ensuite vers App Engine. Vous pouvez créer jusqu'à 100 files d'attente. Les files d'attente ne peuvent pas être créées dynamiquement.

Ce fichier de configuration de file d'attente définit deux files d'attente :

queue:
- name: queue-blue
  target: v2.task-module
  rate: 5/s

- name: queue-red
  rate: 1/s

Pour importer le fichier :

gcloud app deploy queue.yaml

Toutes les tâches ajoutées à queue-blue sont envoyées au module cible v2.task-module. La fréquence d'actualisation de queue-red passe de 5/s à 1/s. Les tâches seront retirées de la file d'attente et envoyées à leur cible à raison d'une tâche par seconde.

Si vous supprimez une file d'attente, vous devez attendre environ 7 jours avant de créer une file d'attente du même nom.

De nombreux autres paramètres peuvent être ajoutés au fichier de configuration pour personnaliser le comportement d'une file d'attente d'envoi. Pour en savoir plus, reportez-vous à la documentation de référence sur le fichier de configuration de file d'attente.

Définir le taux de traitement de la file d'attente d'envoi

Vous pouvez contrôler le taux de traitement des tâches dans chacune de vos files d'attente en définissant d'autres directives, telles que rate, bucket_size et max_concurrent_requests.

La file d'attente de tâches utilise des token buckets (seaux à jetons) pour contrôler le taux d'exécution des tâches. Chaque file d'attente nommée comporte un token bucket (seau à jetons) dont le nombre maximal de jetons est spécifié par bucket_size, ou de 5 jetons maximum si vous ne spécifiez pas la taille du bucket.

Chaque fois que l'application exécute une tâche, un jeton est supprimé du bucket. L'application continue de traiter des tâches de la file d'attente jusqu'à ce que le bucket n'ait plus de jetons. App Engine remplit le bucket de nouveaux jetons de manière continue en fonction de la valeur de rate que vous avez spécifiée pour la file d'attente.

Si la file d'attente contient des tâches à traiter et que son bucket contient des jetons, App Engine traite simultanément autant de tâches qu'il y a de jetons. Cela peut entraîner des rafales de traitement, ce qui consomme des ressources système et concurrence les requêtes servant les utilisateurs.

Si vous souhaitez empêcher l'exécution simultanée d'un trop grand nombre de tâches ou éviter les conflits dans le datastore, utilisez max_concurrent_requests.

L'exemple suivant montre comment définir max_concurrent_requests pour limiter les tâches et comment ajuster la taille et le taux du bucket en fonction des besoins et des ressources disponibles :

queue:
- name: queue-blue
  rate: 20/s
  bucket_size: 40
  max_concurrent_requests: 10

Définir des limites de stockage pour toutes les files d'attente

Vous pouvez vous servir du fichier de configuration de file d'attente pour définir la quantité totale d'espace de stockage que les données de tâche peuvent utiliser sur l'ensemble des files d'attente. Pour définir la limite de l'espace de stockage total, incluez un élément nommé total_storage_limit au niveau supérieur :

# Set the total storage limit for all queues to 120MB
total_storage_limit: 120M
queue:
- name: queue-blue
  rate: 35/s

La valeur est un nombre suivi d'une unité : B pour les octets, K pour les kilo-octets, M pour les mégaoctets, G pour les gigaoctets et T pour les téraoctets. Par exemple, la valeur 100K spécifie une limite de 100 kilo-octets. Si l'ajout d'une tâche risque de provoquer le dépassement de la limite autorisée pour le stockage, la demande d'ajout de la tâche à la file d'attente échoue. La limite par défaut est de 500M (500 mégaoctets) pour les applications gratuites. Pour les applications facturées, il n'y a pas de limite tant que vous n'en définissez pas une explicitement. Vous pouvez utiliser cette limite pour protéger votre application contre une erreur de programmation fork bomb dans laquelle chaque tâche ajoute plusieurs autres tâches au cours de son exécution.

Si votre application reçoit des erreurs pour un quota insuffisant lors de l'ajout de tâches, il peut être utile d'augmenter la limite de stockage total. Si vous utilisez cette fonctionnalité, il est vivement recommandé de définir une limite correspondant au stockage requis sur plusieurs jours de tâches. Cela permet aux files d'attente d'être temporairement sauvegardées et de continuer à accepter de nouvelles tâches tout en résolvant celles en attente, tout en étant protégées contre les erreurs de programmation.

Surveiller les files d'attente dans Cloud Console

La page "Files d'attente de tâches" dans Cloud Console affiche des informations sur toutes les files d'attente de tâches de votre application.

  1. Accédez à la page "Files d'attente de tâches" dans Cloud Console et sélectionnez l'onglet "Files d'attente d'envoi" dans la barre de menu en haut de la page.

    Accéder à l'onglet Files d'attente d'envoi

  2. L'onglet Files d'attente d'envoi répertorie toutes les files d'attente de l'application. Cliquez sur un nom de file d'attente pour afficher la page Détails de la file d'attente de tâches, où vous pouvez voir toutes les tâches de la file d'attente sélectionnée.

Étape suivante