Ce document fournit des informations sur la publication de messages.
Une application d'éditeur crée et envoie des messages dans un sujet. Pub/Sub propose une distribution des messages au moins une fois et un classement au mieux pour les abonnés existants.
Le flux général d'une application d'éditeur est organisé comme suit :
- Vous créez un message contenant vos données.
- Envoyez une requête au serveur Pub/Sub pour publier le message dans le sujet spécifié.
Avant de commencer
Avant de configurer le workflow de publication, assurez-vous d'avoir effectué les tâches suivantes :
- En savoir plus sur le processus de publication
- Créez un sujet.
- Choisissez et créez un abonnement.
Rôles requis
Pour obtenir les autorisations nécessaires pour publier des messages dans un sujet, demandez à votre administrateur de vous accorder le rôle IAM Éditeur Pub/Sub (roles/pubsub.publisher) sur le sujet.
Pour en savoir plus sur l'attribution de rôles, consultez Gérer l'accès aux projets, aux dossiers et aux organisations.
Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.
Vous devez disposer d'autorisations supplémentaires pour créer ou mettre à jour des sujets et des abonnements.
Format des messages
Un message est constitué de champs contenant des données du message et des métadonnées. Spécifiez au moins l'un des éléments suivants dans le message :
- Les données du message
- Une clé de tri
- Attributs avec des métadonnées supplémentaires
Le service Pub/Sub ajoute les champs suivants au message :
- ID de message unique pour le sujet
- Horodatage correspondant au moment où le service Pub/Sub reçoit le message
Pour en savoir plus sur les messages, consultez Format des messages.
Publier des messages
Vous pouvez publier des messages à l'aide de la console Google Cloud , de la Google Cloud CLI, de l'API Pub/Sub et des bibliothèques clientes. Les bibliothèques clientes peuvent publier des messages de manière asynchrone.
Les exemples suivants montrent comment publier un message sur un sujet.
Console
Pour publier un message, procédez comme suit :
Dans la console Google Cloud , accédez à la page Sujets Pub/Sub.
Cliquez sur l'ID du sujet.
Sur la page Détails du sujet, sous Messages, cliquez sur Publier un message.
Dans le champ Corps du message, saisissez les données associées au message.
Cliquez sur Publier.
gcloud
Pour publier un message, exécutez la commande gcloud pubsub topics publish :
gcloud pubsub topics publish TOPIC_ID \ --message=MESSAGE_DATA \ [--attribute=KEY="VALUE",...]
Remplacez l'élément suivant :
- TOPIC_ID : ID du sujet
- MESSAGE_DATA : chaîne contenant les données du message
- KEY : clé d'un attribut de message
- VALUE : valeur de la clé de l'attribut de message
REST
Pour publier un message, envoyez une requête POST comme suit :
POST https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID:publish Content-Type: application/json Authorization: Bearer $(gcloud auth application-default print-access-token)
Remplacez l'élément suivant :
- PROJECT_ID : ID du projet avec le sujet
- TOPIC_ID : ID du sujet
Spécifiez les champs suivants dans le corps de la requête :
{
"messages": [
{
"attributes": {
"KEY": "VALUE",
...
},
"data": "MESSAGE_DATA",
}
]
}Remplacez l'élément suivant :
- KEY : clé d'un attribut de message
- VALUE : valeur de la clé de l'attribut de message
- MESSAGE_DATA : chaîne encodée en base64 avec les données du message
Le message doit contenir un champ de données non vide ou au moins un attribut.
Si la requête aboutit, la réponse est un objet JSON avec l'ID du message. L'exemple suivant est une réponse avec un ID de message :
{
"messageIds": [
"19916711285",
]
}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 de l'API Pub/Sub en langage 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 de l'API Pub/Sub en langage C#.
Go
L'exemple suivant utilise la version majeure de la bibliothèque cliente Pub/Sub pour Go (v2). Si vous utilisez toujours la bibliothèque v1, consultez le guide de migration vers la v2. Pour afficher la liste des exemples de code v1, consultez les exemples de code obsolètes.
Avant d'essayer cet exemple, suivez les instructions de configuration pour Go décrites dans le guide de démarrage rapide : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Pub/Sub en langage 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 de l'API Java Pub/Sub.
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 de l'API Pub/Sub en langage 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 de l'API Pub/Sub en langage Node.js.
PHP
Avant d'essayer cet exemple, suivez les instructions d'installation dans le langage PHP 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 de l'API Pub/Sub en langage PHP.
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 de l'API Python Pub/Sub.
Ruby
L'exemple suivant utilise la version 3 de la bibliothèque cliente Pub/Sub pour Ruby. Si vous utilisez toujours la bibliothèque v2, consultez le guide de migration vers la version 3. Pour afficher la liste des exemples de code Ruby v2, consultez les exemples de code obsolètes.
Avant d'essayer cet exemple, suivez les instructions de configuration pour Ruby décrites dans le guide de démarrage rapide : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Pub/Sub en langage Ruby.
Rust
Avant d'essayer cet exemple, suivez les instructions de configuration de Rust dans le guide de démarrage rapide : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Pub/Sub pour Rust.
Après la publication d'un message, le service Pub/Sub renvoie l'ID du message à l'éditeur.
Utiliser des attributs pour publier un message
Vous pouvez intégrer des attributs personnalisés sous forme de métadonnées dans des messages Pub/Sub. Les attributs fournissent des informations supplémentaires sur le message, telles que sa priorité, son origine ou sa destination. Les attributs peuvent également être utilisés pour filtrer les messages de l'abonnement.
Suivez ces consignes pour utiliser des attributs dans vos messages :
Vous pouvez avoir au maximum 100 attributs par message.
Les clés et les valeurs d'attribut doivent être de type chaîne. Aucun encodage n'est requis.
Les clés d'attribut ne doivent pas commencer par
googni dépasser 256 octets.Les valeurs d'attribut ne doivent pas dépasser 1 024 octets.
Le schéma du message peut être représenté comme suit :
{
"data": string,
"attributes": {
string: string,
...
},
"messageId": string,
"publishTime": string,
"orderingKey": string
}
Pour les doublons côté publication, il est possible de voir différentes valeurs publishTime pour le même message d'origine côté client, même avec le même messageId.
Le schéma JSON PubsubMessage est publié dans la documentation REST et RPC. Vous pouvez utiliser des attributs personnalisés pour les codes temporels des événements.
Les exemples suivants montrent comment publier un message avec des attributs dans un sujet.
Console
Pour publier un message avec des attributs, procédez comme suit :
Dans la console Google Cloud , accédez à la page Sujets.
Cliquez sur le sujet pour lequel vous souhaitez publier des messages.
Sur la page d'informations du sujet, cliquez sur Messages.
Cliquez sur Publier un message.
Dans le champ Corps du message, saisissez les données associées au message.
Sous Attributs du message, cliquez sur Ajouter un attribut.
Saisissez une paire clé/valeur.
Ajoutez d'autres attributs si nécessaire.
Cliquez sur Publier.
gcloud
gcloud pubsub topics publish my-topic --message="hello" \ --attribute="origin=gcloud-sample,username=gcp,eventTime='2021-01-01T12:00:00Z'"
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 de l'API Pub/Sub en langage 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 de l'API Pub/Sub en langage C#.
Go
L'exemple suivant utilise la version majeure de la bibliothèque cliente Pub/Sub pour Go (v2). Si vous utilisez toujours la bibliothèque v1, consultez le guide de migration vers la v2. Pour afficher la liste des exemples de code v1, consultez les exemples de code obsolètes.
Avant d'essayer cet exemple, suivez les instructions de configuration pour Go décrites dans le guide de démarrage rapide : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Pub/Sub en langage 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 de l'API Java Pub/Sub.
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 de l'API Pub/Sub en langage 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 de l'API Python Pub/Sub.
Ruby
L'exemple suivant utilise la version 3 de la bibliothèque cliente Pub/Sub pour Ruby. Si vous utilisez toujours la bibliothèque v2, consultez le guide de migration vers la version 3. Pour afficher la liste des exemples de code Ruby v2, consultez les exemples de code obsolètes.
Avant d'essayer cet exemple, suivez les instructions de configuration pour Ruby décrites dans le guide de démarrage rapide : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Pub/Sub en langage Ruby.
Rust
Avant d'essayer cet exemple, suivez les instructions de configuration de Rust dans le guide de démarrage rapide : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Pub/Sub pour Rust.
Utiliser des clés de tri pour publier un message
Pour recevoir les messages dans l'ordre dans vos clients abonnés, vous devez configurer vos clients éditeurs pour qu'ils publient les messages avec des clés de tri.
Pour comprendre le concept de clés de tri, consultez Classer les messages.
Voici une liste des points clés à prendre en compte pour la messagerie ordonnée pour les clients éditeurs :
Tri dans un seul client de publication : lorsqu'un seul client de publication publie des messages avec la même clé de tri dans la même région, le client abonné reçoit ces messages dans l'ordre exact de leur publication. Par exemple, si un client éditeur publie les messages 1, 2 et 3 avec la clé de tri A, le client abonné les reçoit dans l'ordre 1, 2, 3.
Tri sur plusieurs clients éditeurs : l'ordre des messages reçus par les clients abonnés correspond à l'ordre dans lequel ils ont été publiés dans la même région, même lorsque plusieurs clients éditeurs utilisent la même clé de tri. Cependant, les clients éditeurs eux-mêmes n'ont pas connaissance de cet ordre.
Par exemple, si les clients éditeurs X et Y publient chacun des messages avec la clé de tri A, et que le message de X est reçu par Pub/Sub avant celui de Y, tous les clients abonnés reçoivent le message de X avant celui de Y. Si un ordre strict des messages entre différents clients éditeurs est requis, ces clients doivent mettre en œuvre un mécanisme de coordination supplémentaire pour s'assurer qu'ils ne publient pas simultanément des messages avec la même clé de tri. Par exemple, un service de verrouillage peut être utilisé pour conserver la propriété d'une clé de tri lors de la publication.
Tri entre régions : la garantie de distribution ordonnée ne s'applique que lorsque les publications d'une clé de tri se trouvent dans la même région. Si votre application d'éditeur publie des messages avec la même clé de tri dans différentes régions, l'ordre ne peut pas être appliqué à ces publications. Les abonnés peuvent se connecter à n'importe quelle région, et la garantie de tri est toujours maintenue.
Lorsque vous exécutez votre application dans Google Cloud, elle se connecte par défaut au point de terminaison Pub/Sub de la même région. Par conséquent, l'exécution de votre application dans une seule région au sein deGoogle Cloud garantit généralement que vous interagissez avec une seule région.
Lorsque vous exécutez votre application de publication en dehors deGoogle Cloud ou dans plusieurs régions, vous pouvez vous assurer que vous vous connectez à une seule région en utilisant un point de terminaison d'emplacement lors de la configuration de votre client Pub/Sub. Tous les points de terminaison d'emplacement pour Pub/Sub pointent vers des régions uniques. Pour en savoir plus sur les points de terminaison géographiques, consultez Points de terminaison Pub/Sub. Pour obtenir la liste de tous les points de terminaison localisés pour Pub/Sub, consultez Liste des points de terminaison localisés.
Échecs de publication : lorsque la publication avec une clé de tri échoue, les messages en file d'attente de la même clé de tri dans l'éditeur échouent, y compris les futures requêtes de publication de cette clé de tri. Vous devez reprendre la publication avec des clés de tri lorsque de telles défaillances se produisent. Pour obtenir un exemple de reprise de l'opération de publication, consultez Réessayer des requêtes avec des clés de tri.
Vous pouvez publier des messages avec des clés de tri à l'aide de la console Google Cloud , de Google Cloud CLI, de l'API Pub/Sub ou des bibliothèques clientes.
Console
Pour publier un message avec des attributs, procédez comme suit :
Dans la console Google Cloud , accédez à la page Sujets.
Cliquez sur le sujet pour lequel vous souhaitez publier des messages.
Sur la page d'informations du sujet, cliquez sur Messages.
Cliquez sur Publier un message.
Dans le champ Corps du message, saisissez les données associées au message.
Dans le champ Tri des messages, saisissez une clé de tri.
Cliquez sur Publier.
gcloud
Pour publier un message avec une clé de tri, exécutez la commande gcloud pubsub topics publish et l'option --ordering-key :
gcloud pubsub topics publish TOPIC_ID \ --message=MESSAGE_DATA \ --ordering-key=ORDERING_KEY
Remplacez l'élément suivant :
- TOPIC_ID : ID du sujet
- MESSAGE_DATA : chaîne contenant les données du message
- ORDERING_KEY : chaîne avec une clé de tri
REST
Pour publier un message avec une clé de tri, envoyez une requête POST comme suit :
POST https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID:publish Content-Type: application/json Authorization: Bearer $(gcloud auth application-default print-access-token)
Remplacez l'élément suivant :
- PROJECT_ID : ID du projet avec le sujet
- TOPIC_ID : ID du sujet
Spécifiez les champs suivants dans le corps de la requête :
{
"messages": [
{
"attributes": {
"KEY": "VALUE",
...
},
"data": "MESSAGE_DATA",
"ordering_key": "ORDERING_KEY",
}
]
}Remplacez l'élément suivant :
- KEY : clé d'un attribut de message
- VALUE : valeur de la clé de l'attribut de message
- MESSAGE_DATA : chaîne encodée en base64 avec les données du message
- ORDERING_KEY : chaîne avec une clé de tri
Le message doit contenir un champ de données non vide ou au moins un attribut.
Si la requête aboutit, la réponse est un objet JSON avec l'ID du message. L'exemple suivant est une réponse avec un ID de message :
{
"messageIds": [
"19916711285",
]
}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 de l'API Pub/Sub en langage 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 de l'API Pub/Sub en langage C#.
Go
L'exemple suivant utilise la version majeure de la bibliothèque cliente Pub/Sub pour Go (v2). Si vous utilisez toujours la bibliothèque v1, consultez le guide de migration vers la v2. Pour afficher la liste des exemples de code v1, consultez les exemples de code obsolètes.
Avant d'essayer cet exemple, suivez les instructions de configuration pour Go décrites dans le guide de démarrage rapide : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Pub/Sub en langage 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 de l'API Java Pub/Sub.
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 de l'API Pub/Sub en langage 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 de l'API Python Pub/Sub.
Ruby
L'exemple suivant utilise la version 3 de la bibliothèque cliente Pub/Sub pour Ruby. Si vous utilisez toujours la bibliothèque v2, consultez le guide de migration vers la version 3. Pour afficher la liste des exemples de code Ruby v2, consultez les exemples de code obsolètes.
Avant d'essayer cet exemple, suivez les instructions de configuration pour Ruby décrites dans le guide de démarrage rapide : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Pub/Sub en langage Ruby.
Rust
Avant d'essayer cet exemple, suivez les instructions de configuration de Rust dans le guide de démarrage rapide : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Pub/Sub pour Rust.
Surveiller un éditeur
Cloud Monitoring fournit un certain nombre de métriques pour surveiller les sujets.
Pour surveiller un sujet et maintenir un éditeur en bon état, consultez Maintenir un éditeur en bon état.
Étapes suivantes
Pour restreindre les emplacements où Pub/Sub stocke les données des messages, consultez Restreindre les emplacements des ressources Pub/Sub.
Pour publier des messages avec un schéma, consultez Présentation des schémas.
Pour savoir comment configurer des options de livraison avancées, consultez les ressources suivantes :