Cette page explique comment publier des messages dans des sujets Lite. Vous pouvez publier des messages avec la bibliothèque cliente Pub/Sub Lite pour Java.
Après avoir publié des messages et créé un abonnement Lite dans un sujet Lite, vous pouvez recevoir des messages à partir de l'abonnement Lite.
Format du message
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
- Une heure de l'événement
- Attributs avec des métadonnées supplémentaires
La bibliothèque cliente attribue automatiquement le message à une partition, et le service Pub/Sub Lite ajoute les champs suivants au message :
- Un ID de message unique dans la partition
- Horodatage correspondant au moment où le service Pub/Sub Lite stocke le message dans la partition
Publier des messages
Pour publier des messages, demandez une connexion en streaming au sujet Lite, puis envoyez des messages via la connexion en streaming.
L'exemple suivant montre comment publier des messages dans un sujet Lite :
gcloud
Cette commande nécessite Python 3.6 ou version ultérieure et l'installation du package Python grpcio. Pour les utilisateurs de macOS, Linux et Cloud Shell, exécutez :
sudo pip3 install grpcio
export CLOUDSDK_PYTHON_SITEPACKAGES=1
Pour publier un message, exécutez la commande gcloud pubsub topics publish :
gcloud pubsub lite-topics publish TOPIC_ID \
--location=LITE_LOCATION \
--message=MESSAGE_DATA
Remplacez les éléments suivants :
- TOPIC_ID : ID du sujet Lite
- LITE_LOCATION : emplacement du sujet Lite
- MESSAGE_DATA : chaîne contenant les données du message
Go
Avant d'exécuter cet exemple, suivez les instructions de configuration de Go dans la section Bibliothèques clientes de Pub/Sub Lite.
Java
Avant d'exécuter cet exemple, suivez les instructions de configuration de Java dans la section Bibliothèques clientes de Pub/Sub Lite.
Python
Avant d'exécuter cet exemple, suivez les instructions de configuration de Python dans la section Bibliothèques clientes de Pub/Sub Lite.
La bibliothèque cliente envoie des messages de manière asynchrone et gère les erreurs. Si une erreur se produit, la bibliothèque cliente envoie à nouveau le message.
- Le service Pub/Sub Lite ferme le flux.
- La bibliothèque cliente met les messages en mémoire tampon et rétablit une connexion au sujet Lite.
- La bibliothèque cliente envoie les messages dans l'ordre.
Après la publication d'un message, le service Pub/Sub Lite stocke le message dans une partition et renvoie l'ID du message à l'éditeur.
Utiliser des clés de tri
Si les messages ont la même clé de tri, la bibliothèque cliente les attribue à la même partition. La clé de tri doit être une chaîne de 1 024 octets maximum.
La clé de tri se trouve dans le champ key
d'un message.
Vous pouvez définir des clés de tri avec la bibliothèque cliente.
gcloud
Cette commande nécessite Python 3.6 ou version ultérieure et l'installation du package Python grpcio. Pour les utilisateurs de macOS, Linux et Cloud Shell, exécutez :
sudo pip3 install grpcio
export CLOUDSDK_PYTHON_SITEPACKAGES=1
Pour publier un message, exécutez la commande gcloud pubsub topics publish :
gcloud pubsub lite-topics publish TOPIC_ID \
--location=LITE_LOCATION \
--ordering-key=ORDERING_KEY \
--message=MESSAGE_DATA
Remplacez les éléments suivants :
- TOPIC_ID : ID du sujet Lite
- LITE_LOCATION : emplacement du sujet Lite
- ORDERING_KEY : chaîne permettant d'attribuer des messages aux partitions
- MESSAGE_DATA : chaîne contenant les données du message
Go
Avant d'exécuter cet exemple, suivez les instructions de configuration de Go dans la section Bibliothèques clientes de Pub/Sub Lite.
Java
Avant d'exécuter cet exemple, suivez les instructions de configuration de Java dans la section Bibliothèques clientes de Pub/Sub Lite.
Python
Avant d'exécuter cet exemple, suivez les instructions de configuration de Python dans la section Bibliothèques clientes de Pub/Sub Lite.
Vous pouvez envoyer plusieurs messages à la même partition à l'aide de clés de tri, afin que les abonnés reçoivent les messages dans l'ordre. La bibliothèque cliente peut attribuer plusieurs clés de tri à la même partition.
Définir l'heure de l'événement
Vous pouvez utiliser l'heure de l'événement pour publier vos messages Lite. L'heure de l'événement est un attribut personnalisé que vous pouvez ajouter à votre message.
Vous pouvez définir le code temporel de l'événement avec la bibliothèque cliente ou la CLI gCloud.
Cette commande nécessite Python 3.6 ou version ultérieure et l'installation du package Python grpcio. Pour les utilisateurs de macOS, Linux et Cloud Shell, exécutez :
sudo pip3 install grpcio
export CLOUDSDK_PYTHON_SITEPACKAGES=1
Pour publier un message, exécutez la commande gcloud pubsub topics publish :
gcloud pubsub lite-topics publish TOPIC_ID \
--location=LITE_LOCATION \
--event-time=EVENT_TIME \
--message=MESSAGE_DATA
Remplacez les éléments suivants :
TOPIC_ID : ID du sujet Lite
LITE_LOCATION : emplacement du sujet Lite
EVENT_TIME: heure de l'événement spécifiée par l'utilisateur. Pour en savoir plus sur les formats d'heure, exécutez
gcloud topic datetimes
.MESSAGE_DATA : chaîne contenant les données du message
Utiliser des attributs
Les attributs de message sont des paires clé/valeur avec des métadonnées associées au message. Les attributs peuvent être des chaînes de texte ou d'octets.
Les attributs se trouvent dans le champ attributes
d'un message. Vous pouvez définir des attributs avec la bibliothèque cliente.
gcloud
Cette commande nécessite Python 3.6 ou version ultérieure et l'installation du package Python grpcio. Pour les utilisateurs de macOS, Linux et Cloud Shell, exécutez :
sudo pip3 install grpcio
export CLOUDSDK_PYTHON_SITEPACKAGES=1
Pour publier un message, exécutez la commande gcloud pubsub topics publish :
gcloud pubsub lite-topics publish TOPIC_ID \
--location=LITE_LOCATION \
--message=MESSAGE_DATA \
--attribute=KEY=VALUE,...
Remplacez les éléments suivants :
- TOPIC_ID : ID du sujet Lite
- LITE_LOCATION : emplacement du sujet Lite
- 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
Go
Avant d'exécuter cet exemple, suivez les instructions de configuration de Go dans la section Bibliothèques clientes de Pub/Sub Lite.
Java
Avant d'exécuter cet exemple, suivez les instructions de configuration de Java dans la section Bibliothèques clientes de Pub/Sub Lite.
Python
Avant d'exécuter cet exemple, suivez les instructions de configuration de Python dans la section Bibliothèques clientes de Pub/Sub Lite.
Les attributs peuvent indiquer comment traiter un message. Les abonnés peuvent analyser le champ attributes
d'un message et le traiter en fonction de ses attributs.
Messages par lot
La bibliothèque cliente publie des messages par lot. Les lots plus volumineux utilisent moins de ressources de calcul, mais augmentent la latence. Vous pouvez modifier la taille du lot à l'aide des paramètres de traitement par lot.
Le tableau suivant répertorie les paramètres de traitement par lot que vous pouvez configurer :
Paramètre | Description | Par défaut |
---|---|---|
Taille d'une requête | Taille maximale du lot, exprimée en octets. | 3,5 Mio |
Le nombre de messages | Nombre maximal de messages dans un lot. | 1 000 messages |
Délai de publication | Durée, en millisecondes, entre l'ajout du message à un lot et l'envoi du lot au sujet Lite. | 50 millisecondes |
Vous pouvez configurer les paramètres de traitement par lot avec la bibliothèque cliente.
Go
Avant d'exécuter cet exemple, suivez les instructions de configuration de Go dans la section Bibliothèques clientes de Pub/Sub Lite.
Java
Avant d'exécuter cet exemple, suivez les instructions de configuration de Java dans la section Bibliothèques clientes de Pub/Sub Lite.
Python
Avant d'exécuter cet exemple, suivez les instructions de configuration de Python dans la section Bibliothèques clientes de Pub/Sub Lite.
Lorsqu'une application d'éditeur démarre, la bibliothèque cliente crée un lot pour chaque partition d'un sujet Lite. Par exemple, si un sujet Lite comporte deux partitions, les éditeurs créent deux lots et envoient chaque lot à une partition.
Après la publication d'un message, la bibliothèque cliente la met en mémoire tampon jusqu'à ce que le lot dépasse la taille maximale de la requête, le nombre maximal de messages ou le délai de publication.
Trier des messages
Les sujets Lite trient les messages dans chaque partition en fonction de leur date de publication. Pour attribuer des messages à la même partition, utilisez une clé de tri.
Pub/Sub Lite distribue les messages d'une partition dans l'ordre, et les abonnés peuvent les traiter dans l'ordre. Pour en savoir plus, consultez la page Recevoir des messages.
Idempotence de publication
Les bibliothèques clientes Pub/Sub Lite prennent en charge la publication idempotente à partir des versions suivantes:
- java-pubsublite: version 1.10.0
- python-pubsublite: version 1.8.0
- google-cloud-go: pubsublite version 1.7.0.
Si la publication d'un message est réessayée en raison d'erreurs réseau ou de serveur, elle est stockée exactement une seule fois. L'idempotency n'est garantie que dans la même session. Elle ne peut pas être garantie si le même message est publié à nouveau à l'aide d'un nouveau client éditeur. Cela n'entraîne aucuns frais de service supplémentaires ni n'augmente la latence de publication.
Activer ou désactiver la publication idempotente
La publication idempotente est activée par défaut dans les bibliothèques clientes Pub/Sub Lite. Il peut être désactivé à l'aide des paramètres du client de l'éditeur dans la bibliothèque cliente correspondante.
Si la publication idempotente est activée, le décalage renvoyé dans un résultat de publication peut être -1
. Cette valeur est renvoyée lorsque le message est identifié comme un double d'un message déjà publié, mais que le serveur ne dispose pas d'informations suffisantes pour renvoyer le décalage du message au moment de la publication.
Les messages reçus par les abonnés ont toujours un décalage valide.
Dépannage
Doublons reçus
Étant donné que l'idempotency est limitée à une seule session, des doublons peuvent être reçus si vous recréez le client de l'éditeur pour publier les mêmes messages.
Un client abonné peut recevoir le même message plusieurs fois si des partitions sont automatiquement attribuées aux abonnés par le service Pub/Sub Lite (paramètre par défaut). Un message peut être renvoyé à un autre client abonné en cas de réaffectation.
Erreur de l'éditeur
L'état d'une session d'éditeur est collecté sur le serveur après sept jours d'inactivité. Si une session est reprise après cette période, le client éditeur se termine avec un message d'erreur semblable à "Failed Precondition: Expected message to have publish sequence number of…" (Condition préalable non remplie : le message attendu doit avoir le numéro de séquence de publication de…) et n'accepte pas de nouveaux messages. Recréez le client de l'éditeur pour résoudre cette erreur.