Migrer des files d'attente de retrait vers Pub/Sub

Cette page explique comment migrer le code de files d'attente de retrait depuis les files d'attente de tâches vers Pub/Sub. Pub/Sub est désormais la méthode privilégiée pour effectuer des tâches de file d'attente de retrait dans App Engine.

Si votre application utilise à la fois des files d'attente de retrait et des files d'attente d'envoi, utilisez ce guide pour migrer vos files d'attente de retrait vers Pub/Sub avant de migrer vos files d'attente d'envoi vers le nouveau service de files d'attente d'envoi Cloud Tasks. La migration des files d'attente de retrait après celle des files d'attente d'envoi vers Cloud Tasks n'est pas recommandée, car l'utilisation obligatoire du fichier queue.yaml est susceptible de provoquer un comportement inattendu avec Cloud Tasks.

Fonctionnalités actuellement indisponibles dans Pub/Sub

Les fonctionnalités de files d'attente de tâches suivantes ne sont actuellement pas disponibles dans Pub/Sub :

  • Traitement par lots à l'aide de tags
  • Déduplication automatique

Tarifs et quotas

Migrer des files d'attente de retrait vers Pub/Sub peut avoir une incidence sur les tarifs et les quotas de votre application.

Tarifs

Pub/Sub possède sa propre grille tarifaire. Comme pour les files d'attente de tâches, l'envoi de requêtes à votre application App Engine avec Pub/Sub peut entraîner des frais pour votre application.

Quotas

Les quotas Pub/Sub sont différents de ceux des files d'attente de tâches. Comme pour les files d'attente de tâches, l'envoi de requêtes à votre application App Engine à partir de Pub/Sub peut avoir un impact sur vos quotas de requêtes App Engine.

Avant la migration

Cette section explique ce que vous devez faire avant de migrer vos files d'attente d'envoi vers Pub/Sub.

Activer l'API Pub/Sub

Pour activer l'API Pub/Sub, cliquez sur Activer sur l'API Pub/Sub dans la bibliothèque d'API. Si un bouton Gérer s'affiche au lieu du bouton Activer, cela signifie que vous avez précédemment activé l'API Pub/Sub pour votre projet et que vous n'avez pas besoin de réeffectuer cette étape.

Authentifier votre application auprès de l'API Pub/Sub

Vous devez authentifier votre application auprès de l'API Pub/Sub. Cette section traite de l'authentification pour deux cas d'utilisation différents.

Pour développer ou tester votre application localement, nous vous recommandons d'utiliser un compte de service. Pour obtenir des instructions sur la configuration d'un compte de service et sur sa connexion à votre application, consultez la documentation sur la manière d'obtenir et de fournir les identifiants du compte de service manuellement.

Pour déployer votre application sur App Engine, vous n'avez pas besoin de fournir de nouvelle authentification. Les identifiants par défaut de l'application déduisent les informations d'authentification pour les applications App Engine.

Télécharger Google Cloud CLI

Si ce n'est déjà fait, téléchargez et installez Google Cloud CLI pour utiliser gcloud CLI avec l'API Pub/Sub. Exécutez la commande suivante à partir de votre terminal si vous avez déjà installé Google Cloud CLI.

gcloud components update

Importer la bibliothèque cliente Python

Suivez les étapes ci-dessous pour utiliser la bibliothèque cliente Python pour Pub/Sub avec votre application App Engine :

  1. Créez un répertoire pour stocker vos bibliothèques tierces, telles que lib/ :

    mkdir lib
  2. Copiez les bibliothèques nécessaires.

    Nous vous recommandons d'utiliser un fichier d'exigences pip au lieu d'installer les bibliothèques une par une à partir de la ligne de commande. Créez un fichier requirements.txt dans le même dossier que votre fichier app.yaml si vous n'avez pas encore de fichier requirements.txt. Ajoutez la ligne suivante :

    google-cloud-pubsub
    

    Utilisez pip (version 6 ou ultérieure) avec l'option -t <directory> pour copier la bibliothèque Pub/Sub que vous avez spécifiée dans votre fichier requirements.txt dans le dossier que vous avez créé à l'étape précédente. Exemple :

    pip install -t lib -r requirements.txt
    
  3. Spécifiez la bibliothèque RPC dans la section libraries de votre fichier app.yaml :

    libraries:
    - name: grpcio
      version: 1.0.0
    
  4. Utilisez le module pkg_resources pour vous assurer que votre application utilise la bonne version de la bibliothèque cliente Python pour Pub/Sub.

    Créez un fichier appengine_config.py dans le même dossier que votre fichier app.yaml si vous n'en avez pas déjà un. Ajoutez le code ci-dessous à votre fichier appengine_config.py :

    # appengine_config.py
    import pkg_resources
    from google.appengine.ext import vendor
    
    # Set path to your libraries folder.
    path = 'lib'
    # Add libraries installed in the path folder.
    vendor.add(path)
    # Add libraries to pkg_resources working set to find the distribution.
    pkg_resources.working_set.add_entry(path)

    Le fichier appengine_config.py ci-dessus suppose que le répertoire de travail actuel est l'emplacement du dossier lib. Dans certains cas, par exemple lors de tests unitaires, le répertoire de travail actuel peut être différent. Pour éviter les erreurs, vous pouvez transmettre de manière explicite le chemin complet du dossier lib comme suit :

    import os
    path = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'lib')
  5. Importez la bibliothèque cliente Python pour Pub/Sub dans tous les fichiers utilisant des files d'attente de retrait à partir de l'API Task Queues :

    from google.cloud import pubsub_v1

Pub/Sub et files d'attente de retrait

Comparatif des fonctionnalités

Pub/Sub envoie des tâches aux nœuds de calcul via une relation éditeur/abonné. Un abonnement pull dans Pub/Sub fonctionne comme une file d'attente de retrait dans les files d'attente de tâches, car l'abonné extrait le message du sujet. Le tableau ci-dessous répertorie les principales fonctionnalités de files d'attente de retrait dans les files d'attente de tâches, ainsi que la fonctionnalité associée aux abonnements pull dans Pub/Sub.

Fonctionnalité de files d'attente de tâches Fonctionnalité Pub/Sub
Queue Sujet
Tâche Message
Nœud de calcul Abonné

Pour en savoir plus sur l'architecture de Pub/Sub, consultez la page Cloud Pub/Sub : un service de messagerie à l'échelle de Google.

Comparaison des workflows

Vous trouverez ci-dessous une comparaison entre un workflow classique d'une file d'attente de retrait dans les files d'attente de tâches et un workflow d'un abonnement pull dans Pub/Sub.

Workflow de files d'attente de tâches Workflow Pub/Sub
Vous créez la file d'attente de retrait. Vous créez le sujet et effectuez la souscription de votre abonné (le nœud de calcul) au sujet.
Vous créez la tâche et la placez en file d'attente. Vous créez le message et le publiez dans le sujet.
Le nœud de calcul loue la tâche. L'abonné extrait le message du sujet.
Le nœud de calcul traite la tâche. L'abonné traite le message.
Le nœud de calcul supprime la tâche de la file d'attente. L'abonné accuse réception du message.
Le bail expire. Le sujet supprime le message lorsque tous ses abonnés en ont accusé réception.

Créer des abonnements pull dans Pub/Sub

Vous pouvez utiliser un abonnement pull Pub/Sub de la même façon qu'une file d'attente de retrait des files d'attente de tâches. Les abonnements à un sujet n'expirent pas et peuvent coexister pour plusieurs nœuds de calcul. Cela signifie qu'un message peut être traité par plusieurs nœuds de calcul, ce qui constitue l'un des principaux cas d'utilisation de Pub/Sub. Pour recréer vos files d'attente de retrait de files d'attente de tâches sous la forme d'abonnements pull Pub/Sub, créez un sujet pour chaque nœud de calcul et n'abonnez que celui qui est associé au sujet. Cela permet de garantir que chaque message sera traité par un seul nœud de calcul, comme dans les files d'attente de tâches. Pour en savoir plus sur la création et la gestion des abonnements pull, consultez la page Gérer les sujets et les abonnements.

Supprimer des files d'attente de retrait

Après avoir migré vos files d'attente de retrait de files d'attente de tâches vers des abonnements pull Pub/Sub, supprimez-les des files d'attente de tâches à l'aide de votre fichier queue.yaml. Nous vous recommandons de supprimer chaque file d'attente de retrait avant de migrer la suivante. Cela évite que votre application duplique le travail reçu du nouvel abonnement pull Pub/Sub pendant que vous migrez vos autres files d'attente de retrait. Notez que la suppression des files d'attente de retrait des files d'attente de tâches une à une plutôt qu'au moyen d'un seul déploiement peut avoir un impact plus élevé sur votre quota de déploiement App Engine.

Une fois que vous avez supprimé toutes les files d'attente de retrait des files d'attente de tâches, vous pouvez omettre le fichier queue.yaml lors des futurs déploiements de votre application.

Si votre application n'utilise que des files d'attente de retrait, supprimez toutes les références à l'API Task Queues dans votre code. Si votre application utilise à la fois des files d'attente de retrait et des files d'attente d'envoi, vous pouvez supprimer les références à l'API Task Queues présentes dans les fichiers qui n'utilisent que les files d'attente de retrait, ou attendre d'avoir également migré vos files d'attente d'envoi pour supprimer ces références de tous les fichiers.

Étape suivante