Ce document présente un abonnement pull, son workflow et les propriétés associées.
Dans un abonnement pull, un client abonné demande des messages Serveur Pub/Sub.
Le mode pull peut utiliser l'une des deux API de service, Pull ou StreamingPull. Pour exécuter l'API choisie, vous pouvez sélectionner un client de haut niveau fourni par Google ou une bibliothèque cliente de bas niveau générée automatiquement. Vous pouvez également choisir entre le traitement asynchrone et le traitement synchrone des messages.
Avant de commencer
Avant de lire ce document, assurez-vous de maîtriser les points suivants:
Fonctionnement de Pub/Sub et différents termes de Pub/Sub
Les différents types d'abonnements compatibles avec Pub/Sub et les raisons pour lesquelles vous pouvez utiliser un abonnement pull.
Workflow d'abonnement pull
Pour un abonnement pull, votre client abonné envoie des requêtes à au serveur Pub/Sub pour récupérer les messages. Le client abonné utilise l'une des API suivantes :
La plupart des clients abonnés n'effectuent pas ces requêtes directement. Au lieu de cela, les clients s'appuient sur la bibliothèque cliente de haut niveau fournie par Google Cloud, qui effectue des requêtes pull en streaming en interne et envoie des messages de manière asynchrone. Pour un client abonné qui a besoin de mieux contrôler la façon dont messages sont extraits, Pub/Sub utilise un modèle de bas niveau et bibliothèque gRPC générée. Cette bibliothèque effectue des demandes d'extraction en mode pull ou par flux directement. Ces requêtes peuvent être synchrones ou asynchrones.
Les deux images suivantes illustrent le workflow entre un client abonné et abonnement pull.
Workflow d'extraction
Le workflow d'extraction est le suivant et fait référence à la figure 1:
- Le client abonné appelle explicitement la méthode
pull
, qui demande les messages pour qu'ils soient distribués. Cette requête est lePullRequest
, comme indiqué dans l'image. Le serveur Pub/Sub répond par zéro message ou plus, ainsi que par des ID de confirmation. Une réponse avec zéro message ou avec une erreur n'indique pas nécessairement qu'aucun message n'est disponible à recevoir. Ce est
PullResponse
, comme illustré dans l'image.Le client abonné appelle explicitement la méthode
acknowledge
. Le client utilise l'ID de confirmation renvoyé pour confirmer que le message est traité et qu'il n'a pas besoin d'être renvoyé.
Pour une seule requête pull en streaming, un client abonné peut recevoir plusieurs réponses en raison de la connexion ouverte. En revanche, une seule réponse est renvoyées pour chaque demande d'extraction.
Propriétés d'un abonnement pull
Les propriétés que vous configurez pour un abonnement pull déterminent comment vous écrivez des messages dans votre abonnement. Pour en savoir plus, consultez les propriétés d'abonnement.
API de service Pub/Sub
L'abonnement pull Pub/Sub peut utiliser l'une des suivantes pour récupérer les messages:
- Pull
- StreamingPull
Utiliser des RPC unaires Confirm et ModifyAckTimeout lorsque vous recevez des messages à l'aide de ces API. Les deux API Pub/Sub sont décrites dans les onglets suivants.
API StreamingPull
Dans la mesure du possible, les bibliothèques clientes Pub/Sub utilisent StreamingPull pour un débit maximal et une latence minimale. Bien que vous ne vous servirez peut-être jamais directement de l'API StreamingPull, il est important de savoir en quoi elle diffère de l'API Pull.
L'API StreamingPull s'appuie sur une connexion bidirectionnelle persistante pour recevoir plusieurs messages dès qu'ils sont disponibles. Voici les workflow:
Le client envoie une requête au serveur pour établir une connexion. Si le quota de connexions est dépassé, le serveur renvoie une erreur de ressources épuisées. La bibliothèque cliente relance automatiquement les erreurs de quota dépassé.
En l'absence d'erreur ou si le quota de connexion est à nouveau disponible, le serveur envoie en continu des messages au client connecté.
Si le quota de débit est dépassé, le serveur arrête d'envoyer des messages. Cependant, la connexion n'est pas interrompue. Chaque fois qu'il y a suffisamment un quota de débit est à nouveau disponible, le flux reprend.
Le client ou le serveur finit par fermer la connexion.
L'API StreamingPull maintient une connexion ouverte. Les serveurs Pub/Sub ferment régulièrement la connexion après un certain temps pour éviter une connexion persistante de longue durée. La bibliothèque cliente se rouvre automatiquement une connexion StreamingPull.
Les messages sont envoyés à la connexion dès qu'ils sont disponibles. StreamingPull L'API réduit ainsi la latence et optimise le débit des messages.
En savoir plus sur les méthodes RPC StreamingPull : StreamingPullRequest et StreamingPullResponse
API Pull
Cette API est une RPC unaire traditionnelle basée sur un modèle de requête et de réponse. Une seule réponse de pull correspond à une seule requête d'extraction. Voici le workflow:
Le client envoie une requête de messages au serveur. Si le quota de débit est dépassé, le serveur renvoie une ressource l'erreur est épuisée.
En l'absence d'erreur ou si le quota de débit est à nouveau disponible, le serveur répond avec zéro message ou plus, ainsi qu'avec des ID de confirmation.
Lorsque l'API Pull unaire est utilisée, une réponse qui ne contient aucun message ou qui contient n'indique pas nécessairement qu'aucun message n'est disponible recevoir.
L'utilisation de l'API Pull ne garantit pas une faible latence ni un débit élevé messages. Pour obtenir un débit élevé et une faible latence avec l'API Pull, vous doit avoir plusieurs demandes en attente simultanées. Des demandes sont créées lorsque d'anciennes requêtes reçoivent une réponse. L'architecture d'une telle solution sources d'erreurs et difficiles à gérer. Nous vous recommandons d'utiliser la fonction StreamingPull pour ces cas d'utilisation.
N'utilisez l'API Pull à la place de l'API StreamingPull que si vous avez besoin d'un contrôle strict sur les éléments suivants :
- Nombre de messages que le client abonné peut traiter
- La mémoire et les ressources du client
Vous pouvez également utiliser cette API lorsque votre abonné est un proxy entre Pub/Sub et un autre service qui fonctionne de manière plus orientée pull.
En savoir plus sur les méthodes REST pull : Méthode : projects.subscriptions.pull
En savoir plus sur les méthodes RPC pull : PullRequest et PullResponse
Types de modes de traitement des messages
Choisissez l'un des modes pull suivants pour vos clients abonnés.
Mode pull asynchrone
Le mode pull asynchrone dissocie la réception des messages du processus de traitement de messages dans un client abonné. Ce mode est le mode par défaut clients abonnés. Le mode pull asynchrone peut utiliser l'API StreamingPull ou API unaire Pull. Le mode pull asynchrone peut également utiliser la bibliothèque cliente de haut niveau ou de bas niveau générée automatiquement.
Vous trouverez plus d'informations sur les bibliothèques clientes dans la suite de ce document.
Mode pull synchrone
En mode pull synchrone, la réception et le traitement des messages ont lieu et ne sont pas dissociées les unes des autres. Par conséquent, comme pour StreamingPull par rapport aux API Pull unaires, le traitement asynchrone offre une latence plus faible et un débit plus élevé que le traitement synchrone.
Utilisez le mode pull synchrone uniquement pour les applications dont la latence est faible le débit ne sont pas les facteurs les plus importants par rapport à d'autres exigences. Par exemple, une application peut être limitée à l'utilisation du seul modèle de programmation synchrone. Une application avec des contraintes de ressources peut également nécessiter un contrôle plus précis de la mémoire, du réseau ou du processeur. Dans ce cas, utilisez le mode synchrone avec l'API Pull unaire.
Bibliothèques clientes Pub/Sub
Pub/Sub propose des couches de sécurité de haut niveau et de bas bibliothèque cliente.
Bibliothèque cliente Pub/Sub de haut niveau
La bibliothèque cliente de haut niveau fournit des options pour contrôler le les délais de confirmation en utilisant la gestion du bail. Ces options sont que lorsque vous configurez les délais d'accusé de réception à l'aide de la console ou de la CLI au niveau de l'abonnement. Le client de haut niveau implémente également la prise en charge de fonctionnalités telles que la livraison commandée, la distribution de type "exactement une fois" et le contrôle du flux.
Nous vous recommandons d'utiliser le mode pull asynchrone et l'API StreamingPull avec les commandes bibliothèque cliente de haut niveau. Certaines langues ne sont pas prises en charge Google Cloud accepte également l'API Pull dans la bibliothèque cliente de haut niveau.
Pour utiliser les bibliothèques clientes de haut niveau, consultez la section Bibliothèques clientes Pub/Sub.
Bibliothèque cliente Pub/Sub générée automatiquement à bas niveau
Une bibliothèque cliente de bas niveau est disponible pour les cas où vous devez utiliser la classe directement l'API. Vous pouvez utiliser le traitement synchrone ou asynchrone avec la bibliothèque cliente générée automatiquement de bas niveau. Vous devez coder manuellement des fonctionnalités telles que la diffusion ordonnée, la diffusion exactement une fois, le contrôle de flux et la gestion des baux lorsque vous utilisez la bibliothèque cliente générée automatiquement à bas niveau.
Vous pouvez opter pour le modèle de traitement synchrone lorsque vous employez le modèle de bas niveau une bibliothèque cliente générée automatiquement pour tous les langages disponibles. Vous pouvez utiliser une bibliothèque cliente de bas niveau générée automatiquement et une fonction d'extraction synchrone lorsque l'utilisation directe de l'API Pull est logique. Par exemple, vous pouvez avoir une logique d'application existante qui s'appuie sur ce modèle.
Pour utiliser directement les bibliothèques clientes générées automatiquement de bas niveau, consultez la présentation des API Pub/Sub.
Exemples de code de bibliothèque cliente
Exemples de code StreamingPull et de la bibliothèque cliente de haut niveau
C++
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage C++ qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour C++.
C#
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage C# qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour C#.
Go
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Go qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Go.
Java
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Java qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Java.
Node.js
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Node.js qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Node.js.
Node.js
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Node.js qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Node.js.
Python
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Python qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Python.
Ruby
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Ruby qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Ruby.
Récupérer des attributs personnalisés à l'aide de la bibliothèque cliente de haut niveau
Les exemples suivants montrent comment extraire des messages de manière asynchrone et récupérer les attributs personnalisés à partir des métadonnées.
C++
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage C++ qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour C++.
C#
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage C# qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour C#.
Go
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Go qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Go.
Java
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Java qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Java.
Node.js
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Node.js qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Node.js.
Python
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Python qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Python.
Ruby
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Ruby qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Ruby.
Gérer les erreurs à l'aide de la bibliothèque cliente de haut niveau
Les exemples suivants montrent comment gérer les erreurs survenant lorsque à s'abonner aux messages.
C++
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage C++ qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour C++.
Go
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Go qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Go.
Java
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Java qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Java.
Node.js
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Node.js qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Node.js.
Python
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Python qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Python.
Ruby
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Go qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Go.
Exemples de code pull unaire
Voici un exemple de code tirer et reconnaissez un nombre fixe de messages.
C++
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage C++ qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour C++.
C#
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage C# qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour C#.
Java
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Java qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Java.
Node.js
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Node.js qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Node.js.
PHP
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Node.js qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Node.js.
Ruby
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Ruby qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Ruby.
Protocole
Requête :
POST https://pubsub.googleapis.com/v1/projects/myproject/subscriptions/mysubscription:pull
{
"returnImmediately": "false",
"maxMessages": "1"
}
Réponse :
200 OK
{
"receivedMessages": [{
"ackId": "dQNNHlAbEGEIBERNK0EPKVgUWQYyODM2LwgRHFEZDDsLRk1SK...",
"message": {
"data": "SGVsbG8gQ2xvdWQgUHViL1N1YiEgSGVyZSBpcyBteSBtZXNzYWdlIQ==",
"messageId": "19917247034"
}
}]
}
Requête :
POST https://pubsub.googleapis.com/v1/projects/myproject/subscriptions/mysubscription:acknowledge
{
"ackIds": [
"dQNNHlAbEGEIBERNK0EPKVgUWQYyODM2LwgRHFEZDDsLRk1SK..."
]
}
Python
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage Python qui se trouvent sur la page Démarrage rapide : utiliser des bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence sur l'API Pub/Sub pour Python.
Pub/Sub transmet une liste de messages. Si la liste comporte plusieurs messages, Pub/Sub les classe suivant la même clé de tri. Voici quelques mises en garde importantes:
Définir une valeur pour
max_messages
dans la requête ne garantit pas quemax_messages
sont renvoyés, même s'il y a autant de messages dans en attente. L'API Pub/Sub Pull peut renvoyer moins demax_messages
afin de réduire la latence de distribution des messages prêts à être distribués.Une réponse pull fournie avec 0 message ne doit pas être utilisée comme indicateur qu'il n'y a aucun message en attente. Il est possible d'obtenir une réponse avec zéro message et une requête ultérieure qui renvoie des messages.
Pour obtenir une faible latence de distribution des messages avec le mode pull unaire, il est essentiel de disposer de nombreuses requêtes pull en attente simultanément. En tant que le débit du sujet augmente, davantage de requêtes pull sont nécessaires. En général, le mode StreamingPull est préférable pour sensibles à la latence.
Quotas et limites
Les connexions Pull et StreamingPull sont soumises à des quotas et des limites. Pour en savoir plus, consultez la page Quotas et limites de Pub/Sub.
Étape suivante
Créez un abonnement pull pour votre sujet.
Créez ou modifiez un abonnement avec la gcloud CLI.
Créez ou modifiez un abonnement à l'aide des API REST.
Créez ou modifiez un abonnement à l'aide des API RPC.