Une fois que vous avez confirmé la réception de messages dans Pub/Sub, ces messages deviennent inaccessibles au client abonné. De plus, les clients abonnés doivent traiter chaque message d'un abonnement même si un seul sous-ensemble est nécessaire.
La fonctionnalité de recherche étend les capacités des abonnés en vous permettant de modifier l'état de confirmation des messages de façon groupée. Par exemple, vous pouvez rouvrir des messages déjà confirmés ou supprimer définitivement des messages de façon groupée. De plus, vous avez la possibilité de copier l'état de confirmation d'un abonnement vers un autre en utilisant la fonctionnalité de recherche associée à un instantané.
Pour une démonstration rapide du fonctionnement de ces fonctionnalités, consultez la section Relire un message dans Pub/Sub en recherchant un instantané ou un horodatage.
Présentation de l'instantané et de la recherche
Un instantané Pub/Sub est une vue durable, homogène et fiable à un point précis dans le temps de l'état de confirmation des messages d'un abonnement. Un instantané enregistre l'état de confirmation de tous les messages d'un abonnement au moment de sa création. Un instantané conserve les messages non confirmés de l'abonnement source au moment de sa création, ainsi que tous les messages publiés dans le sujet après sa création.
La durée de vie d'un instantané est déterminée par le retard en cours de l'abonnement source. Elle est égale à sept jours moins l'âge du message non confirmé le plus ancien de l'abonnement. Prenons pour exemple un instantané d'un abonnement dont le plus ancien message non confirmé en attente date d'une journée. L'instantané expire au bout de six jours. Cette chronologie est nécessaire pour permettre aux instantanés d'assurer une distribution fiable des messages au moins une fois.
La durée de vie maximale possible d'un instantané est de sept jours. Vous ne pouvez pas créer d'instantané qui expire moins d'une heure après sa création.
La fonctionnalité de recherche vous permet de rechercher un instantané ou un horodatage spécifique pour un abonnement. Elle vous permet de contrôler la manière dont Pub/Sub peut distribuer des messages à partir d'un moment précis ou d'un instantané spécifique.
Pour rechercher à une heure antérieure et rouvrir les messages déjà confirmés, vous devez configurer la conservation des messages sur le sujet ou configurer l'abonnement pour conserver les messages confirmés. Pour en savoir plus, consultez les ressources suivantes :
- Activer la conservation des messages du sujet
- Configurer la conservation des messages pour un abonnement
Cohérence à terme des opérations de recherche
Les opérations de recherche sont strictement cohérentes avec la garantie de distribution des messages. Cela signifie que tout message non confirmé en fonction de la condition de recherche est assuré d'être distribué après la réussite de l'opération de recherche. Toutefois, cela ne signifie pas que les messages distribués deviennent immédiatement cohérents avec l'opération de recherche. Ainsi, un message qui a été publié avant l'horodatage de recherche ou confirmé dans un instantané peut toujours être distribué après l'opération de recherche. En un sens, la distribution des messages fonctionne comme un système cohérent dans le temps en ce qui concerne l'opération de recherche : cette dernière peut demander jusqu'à une minute pour prendre entièrement effet.
Cas d'utilisation des opérations de recherche
- Mettre à jour le code d'abonnés en toute sécurité. Lors du déploiement du nouveau code d'abonnés, l'une des craintes est que le nouvel exécutable puisse confirmer la réception de messages par erreur, ce qui entraînerait une perte de messages. L'intégration d'instantanés dans votre processus de déploiement vous permet de résoudre des bugs dans le nouveau code d'abonnés.
- Résoudre des problèmes d'abonné inattendus. Dans les cas où les problèmes d'abonnés ne sont pas associés à un événement de déploiement spécifique, il est possible que vous ne disposiez pas d'un instantané pertinent. Dans ce cas, si vous avez activé la conservation des messages confirmés pour un abonnement, la recherche d'une heure passée vous permet de résoudre l'erreur.
- Économiser du temps et des coûts de traitement. Accusez réception des nombreux messages en attente de façon groupée, si ceux-ci ne sont plus pertinents.
- Tester le code d'abonnés sur des données connues. Lorsque vous testez les performances et la cohérence du code d'abonnés, il est utile de se servir des mêmes données à chaque exécution. Les instantanés permettent d'obtenir des données cohérentes grâce une sémantique forte. Ils peuvent également être appliqués à n'importe quel abonnement associé à un sujet donné, y compris un nouvel abonnement.
Créer un instantané
Vous pouvez créer un instantané à l'aide de la console, des Google APIs ou de Google Cloud CLI.
Console
Pour créer un instantané, procédez comme suit :
Dans la Google Cloud console, accédez à la page Instantanés.
Cliquez sur Create snapshot (Créer un instantané).
Dans le champ Select a Pub/Sub subscription (Sélectionner un abonnement Pub/Sub), sélectionnez un abonnement.
Dans le champ Snapshot ID (ID de l'instantané), saisissez le nom de l'instantané.
Pour en savoir plus sur la façon de nommer les ressources Pub/Sub, consultez la section Consignes de dénomination d'un sujet, d'un abonnement, d'un schéma ou d'un instantané.
Cliquez sur Créer pour créer l'instantané.
Vous pouvez également créer un instantané à partir de la page Abonnements. Si vous créez un instantané immédiatement après avoir créé un abonnement, vous risquez de recevoir une erreur en raison du délai de propagation du nouvel abonnement.
gcloud
Pour créer un instantané, utilisez la
commande
gcloud pubsub snapshots create
suivante :
gcloud pubsub snapshots create \ --project=PROJECT_ID \ --subscription=SUBSCRIPTION_ID \ SNAPSHOT_ID
Remplacez les éléments suivants :
PROJECT_ID. Spécifie l'ID du projet.
SUBSCRIPTION_ID. Spécifie l'ID de l'abonnement.
SNAPSHOT_ID. Spécifie l'ID de l'instantané.
Rechercher un horodatage
Lorsque vous recherchez une heure spécifique, tous les messages reçus par Pub/Sub avant cette heure sont marqués comme confirmés. De même, l'ensemble des messages reçus après cette heure sont marqués comme non confirmés.
Vous pouvez effectuer les types d'opérations de recherche suivants en fonction des horodatages :
Pour supprimer définitivement tous les messages, vous pouvez rechercher une heure future.
Pour rouvrir et traiter à nouveau les messages confirmés, recherchez une heure antérieure.
L'heure de publication du message est générée par les serveurs Pub/Sub
. Pour en savoir plus, consultez la page sur
publishTime
dans la documentation de référence de l'API. Cette approche est imprécise pour les raisons suivantes :
Une variation d'horloge peut avoir lieu entre les serveurs Pub/Sub.
Pub/Sub doit fonctionner en se basant sur l'heure d'arrivée de la requête de publication plutôt que sur le moment où un événement s'est produit dans le système source.
Vous pouvez rechercher un horodatage à l'aide de la console, des Google APIs ou de Google Cloud CLI. Avant de rechercher un horodatage dans un abonnement, assurez-vous que la conservation des messages est activée dans l'abonnement.
Console
Pour rechercher un horodatage, procédez comme suit :
Dans la Google Cloud console, accédez à la page Abonnement.
Cliquez sur un abonnement pour lequel la conservation des messages est activée.
Sur la page des détails de l'abonnement, cliquez sur Relire des messages.
Dans le champ Rechercher, cliquez sur À un moment antérieur.
Sélectionnez une date et une heure appropriées, puis cliquez sur Rechercher.
gcloud
Pour rechercher un horodatage, utilisez la
commande
gcloud pubsub subscriptions seek
suivante :
gcloud pubsub subscriptions seek SUBSCRIPTION_ID \ --time=TIME \
Remplacez les éléments suivants :
- TIME : heure à laquelle vous souhaitez effectuer l'opération de recherche.
- SUBSCRIPTION_ID : ID de l'abonnement.
Pour en savoir plus sur les formats d'heure compatibles, consultez la section gcloud topic datetimes.
Rechercher un instantané
Vous pouvez rouvrir les messages non confirmés à l'aide d'un instantané pour rechercher des abonnements associés au sujet.
Contrairement à la recherche d'une heure, vous n'avez pas besoin de configurer spécialement un abonnement pour rechercher un instantané. Vous devez simplement créer l'instantané à l'avance. Par exemple, vous pouvez créer un instantané lors du déploiement d'un nouveau code d'abonnés, au cas où vous auriez besoin de récupérer des accusés de réception inattendus ou erronés.
Si le retard en cours dans l'abonnement est trop ancien et que l'instantané résultant expire en moins d'une heure, l'opération de recherche échoue.
Vous pouvez rechercher un instantané à l'aide de la console, des Google APIs ou de Google Cloud CLI.
Console
Pour rechercher un instantané, procédez comme suit :
Dans la Google Cloud console, accédez à la page Abonnement.
Cliquez sur un abonnement.
Sur la page des détails de l'abonnement, cliquez sur Relire des messages.
Dans le champ Rechercher, cliquez sur À un instantané.
Sélectionnez un instantané approprié, puis cliquez sur Rechercher.
gcloud
Pour rechercher un instantané, exécutez la
commande
gcloud pubsub subscriptions seek
suivante :
gcloud pubsub subscriptions seek SUBSCRIPTION_ID \ --snapshot=SNAPSHOT_ID
Remplacez les éléments suivants :
- SNAPSHOT_ID : ID d'un instantané. Le sujet de l'instantané doit être le même que celui de l'abonnement.
- SUBSCRIPTION_ID : ID de l'abonnement.
Rechercher avec des filtres
Vous pouvez relire les messages des abonnements avec des filtres. Si vous recherchez un horodatage à l'aide d'un abonnement avec un filtre, le service Pub/Sub renvoie uniquement les messages correspondant au filtre.
Un instantané d'un abonnement avec un filtre contient les messages suivants :
- Tous les messages plus récents que l'instantané, y compris ceux qui ne correspondent pas au filtre.
- Les messages non confirmés antérieurs à l'instantané.
Si vous recherchez un instantané à l'aide d'un abonnement avec un filtre, le service Pub/Sub renvoie uniquement les messages figurant dans l'instantané et qui correspondent au filtre de l'abonnement effectuant la requête de recherche.
Pour en savoir plus sur les filtres, consultez la page Filtrer des messages.
Rechercher des sujets de lettres mortes
Si vous recherchez des messages dans un abonnement avec une file d'attente de lettres mortes, Pub/Sub définit les tentatives d'envoi sur 0. Les messages que vous recevez de ces abonnements comportent un champ qui tient le compte du nombre de tentatives de distribution.
Pour plus d'informations sur les sujets de lettres mortes, consultez la page Effectuer un transfert vers des sujets de lettres mortes.
Rechercher avec des règles de nouvelle tentative
Si vous recherchez des messages dans un abonnement associé à une stratégie de nouvelle tentative, Pub/Sub réinitialise le délai entre les éléments suivants :
- Le délai de confirmation arrive à expiration ou l'abonné envoie un accusé de réception négatif.
- Pub/Sub renvoie le message.
Pour plus d'informations sur les stratégies de répétition, consultez la section Utiliser des stratégies de nouvelle tentative.
Rechercher avec une distribution de type "exactement une fois"
Si vous recherchez des messages dans un abonnement avec une distribution de type "exactement une fois", Pub/Sub renvoie les messages précédemment confirmés qui sont éligibles à la distribution. Tous les accusés de réception d'une distribution effectuée avant l'opération de recherche échoueront. Les opérations de recherche sont cohérentes à terme.
Pour en savoir plus sur les stratégies de répétition, consultez la section Distribution de type "exactement une fois".