Rouvrir et supprimer définitivement des messages

Les API de données d'abonnés Pub/Sub, telles que Pull, fournissent un accès limité aux données de message. Normalement, les messages confirmés ne sont pas accessibles aux abonnés d'un abonnement donné. En outre, les clients abonnés doivent traiter chaque message d'un abonnement, même si seul un sous-ensemble est nécessaire.

La fonctionnalité de recherche étend les fonctionnalités d'abonnement en vous permettant de modifier l'état de confirmation des messages de façon groupée. Par exemple, vous pouvez relire les messages confirmés ou supprimer définitivement des messages de manière groupée. En outre, vous pouvez copier l'état d'un abonnement dans un autre en utilisant la fonctionnalité de recherche avec un instantané.

Ces fonctionnalités sont décrites ci-dessous. Vous pouvez toutefois consulter le guide de démarrage rapide pour découvrir un exemple de cas d'utilisation.

Configurer la conservation des messages

Pour rechercher une date passée et relire les messages déjà confirmés, vous devez d'abord configurer la conservation des messages sur le sujet ou configurer l'abonnement pour conserver les messages confirmés.

Conservation des messages par le sujet

Par défaut, un sujet Pub/Sub supprime les messages dès qu'ils sont confirmés par tous les abonnements associés au sujet. La configuration d'un sujet avec conservation des messages vous offre plus de flexibilité, en permettant à tout abonnement associé au sujet de revenir en arrière et de relire les messages confirmés. La conservation des messages par sujet permet également à un abonnement de relire les messages publiés avant la création d'un abonnement.

Si la conservation des messages de sujet est activée, les coûts de stockage des messages conservés par le sujet sont facturés au projet du sujet.

Console

Pour créer un sujet avec la conservation des messages activée, procédez comme suit:

  1. Dans Cloud Console, accédez à la page Sujets Pub/Sub.

    Accéder à la page des sujets

  2. Cliquez sur Create topic (Créer un sujet).

  3. Dans le champ ID du sujet, saisissez l'ID de votre sujet.

  4. Cochez la case Définir la durée de conservation des messages. Conservez les autres options dans les paramètres par défaut.

  5. Utilisez les menus déroulants sous Durée de conservation des messages pour sélectionner la durée de conservation des messages, en jours, heures et minutes.

  6. Cliquez sur Créer un thème pour enregistrer le thème.

Pour mettre à jour les paramètres de conservation des messages d'un sujet:

  1. Sélectionnez votre sujet sur la page Sujets Pub/Sub.

    Accéder à la page des sujets

  2. Cliquez sur Modifier en haut de la page d'informations du sujet.

  3. Modifiez la durée de conservation ou activez/désactivez la conservation des messages en cochant ou en décochant la case Activer la conservation des messages.

  4. Cliquez sur Mettre à jour pour enregistrer les modifications apportées au sujet.

gcloud

Pour créer un sujet avec une durée de conservation des messages de sept jours, utilisez la commande gcloud pubsub topics create suivante:

gcloud pubsub topics create TOPIC_ID --message-retention-duration=7d

Vous pouvez mettre à jour ce paramètre à l'aide de la commande gcloud pubsub topics update. Cela vous permet également d'activer la conservation des messages pour un sujet existant:

gcloud pubsub topics update TOPIC_ID --message-retention-duration=1d

Vous pouvez également désactiver la conservation des messages pour un sujet à l'aide de la commande update:

gcloud pubsub topics update TOPIC_ID --clear-message-retention-duration

Conservation des messages dans le cadre de l'abonnement

Par défaut, les abonnements suppriment les messages dès qu'ils sont confirmés. Les messages non confirmés sont conservés pendant 7 jours par défaut (configurables par la propriété message_retention_duration de l'abonnement). La configuration d'un abonnement pour conserver les messages confirmés (via la propriété retain_acked_messages) vous permet de relire les messages déjà confirmés qui ont été envoyés à l'abonnement. Les messages d'un abonnement peuvent être conservés pour une durée maximale de sept jours, qu'ils soient confirmés ou non. En d'autres termes, l'âge du message le plus ancien d'un abonnement ne dépassera pas 7 jours.

Si un abonnement est configuré pour conserver les messages confirmés, les coûts de stockage associés à ces messages sont facturés au projet de l'abonnement.

Console

Pour créer un abonnement avec la conservation des messages confirmés activée, procédez comme suit:

  1. Dans Cloud Console, accédez à la page Abonnements Pub/Sub.

    Accéder à la page "Abonnements"

  2. Cliquez sur Créer un abonnement.

  3. Dans le champ ID d'abonnement, saisissez l'ID de votre abonnement.

  4. Utilisez les menus déroulants sous Durée de conservation des messages pour sélectionner la durée de conservation des messages, en jours, heures et minutes.

  5. Cochez la case Conserver les messages confirmés. Conservez les autres options dans les paramètres par défaut.

  6. Cliquez sur Créer un abonnement pour enregistrer l'abonnement.

Pour mettre à jour les paramètres de conservation des messages d'un abonnement, procédez comme suit:

  1. Sélectionnez votre abonnement sur la page Abonnements Pub/Sub.

    Accéder à la page "Abonnements"

  2. Cliquez sur Modifier en haut de la page de détails de l'abonnement.

  3. Modifiez la durée de conservation des messages ou activez/désactivez la conservation des messages confirmés en cochant ou en décochant la case intitulée Conserver les messages confirmés.

  4. Cliquez sur Mettre à jour pour enregistrer les modifications apportées à l'abonnement.

gcloud

Pour créer un abonnement avec la conservation des messages confirmés activée, utilisez la commande gcloud pubsub subscriptions create suivante:

gcloud pubsub subscriptions create SUBSCRIPTION_ID
    --retain_acked_messages=true
    --message-retention-duration=5d
.

Vous pouvez mettre à jour ce paramètre à l'aide de la commande gcloud pubsub subscriptions update. Cela vous permet également de conserver les messages confirmés pour un abonnement existant:

gcloud pubsub subscriptions update SUBSCRIPTION_ID --message-retention-duration=1d

Vous pouvez également désactiver la conservation des messages confirmés pour un abonnement à l'aide de la commande update:

gcloud pubsub subscriptions update SUBSCRIPTION_ID --retain_acked_messages=false

Rechercher un horodatage

La recherche d'une heure marque tous les messages reçus par Pub/Sub avant l'heure comme confirmés, et tous les messages reçus après cette heure comme non confirmés. Vous pouvez rechercher une heure ultérieure dans le futur pour supprimer définitivement des messages. Pour relire et traiter à nouveau les messages déjà confirmés, recherchez un moment antérieur. L'heure de publication du message est générée par les serveurs Pub/Sub (voir la section 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.

Rechercher un instantané

La fonctionnalité d'instantané vous permet de capturer l'état de confirmation des messages d'un abonnement. Une fois l'instantané créé, il conserve les éléments suivants :

  • Tous les messages non confirmés qui se trouvent dans l'abonnement source au moment de la création de l'instantané.

  • Tous les messages publiés par la suite dans le sujet.

Vous pouvez rouvrir ces 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é. Il vous suffit de créer l'instantané à l'avance. Par exemple, vous pouvez créer un instantané lors du déploiement d'un nouveau code d'abonné, au cas où vous devriez récupérer des informations inattendues ou erronées.

Les instantanés expirent et sont supprimés dans les cas suivants, selon la première éventualité :

  • L'instantané a atteint une durée de vie de sept jours.
  • Le message non confirmé le plus ancien de l'instantané dépasse la valeur message retention duration.

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 après six jours, au lieu de sept. Cette chronologie est nécessaire pour que les instantanés puissent garantir une distribution de type "au moins une fois" au minimum.

Cohérence à terme

Les opérations de recherche sont strictement cohérentes avec les garanties de distribution des messages. Cela signifie que tout message non confirmé en fonction de la condition de recherche est assuré d'être distribué au moins une fois 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 la recherche ou confirmé dans un instantané peut être distribué après l'opération de recherche. En d'autres termes, la distribution des messages fonctionne comme un système à terme cohérent pour l'opération de recherche: son activation peut prendre jusqu'à une minute.

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 un sujet 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 compte le nombre de tentatives d'envoi.

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 avec une stratégie de nouvelle tentative, Pub/Sub réinitialise le délai entre les éléments suivants:

  1. Le délai de confirmation arrive à expiration ou l'abonné envoie un accusé de réception négatif.
  2. 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.

Cas d'utilisation

  • Mettre à jour le code d'abonnés en toute sécurité. Lors du déploiement du nouveau code d'abonné, l'une des craintes est que le nouvel exécutable risque de recevoir des messages par erreur, ce qui entraîne une perte de messages. L'intégration d'instantanés dans votre processus de déploiement vous permet de récupérer des bugs dans le nouveau code d'abonné.
  • Résoudre des problèmes d'abonné inattendus. Si les problèmes d'abonné ne sont pas associés à un événement de déploiement spécifique, vous ne disposez peut-être pas d'un instantané pertinent. Dans ce cas, si vous avez activé la conservation des messages confirmés pour un abonnement, le fait de rechercher une heure antérieure vous permet de récupérer 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. En outre, les instantanés peuvent être appliqués à tout abonnement associé à un sujet donné, y compris à un domaine nouvellement créé.

Étape suivante

Vous pouvez utiliser Pub/Sub avec Dataflow. Nous vous déconseillons toutefois d'accéder directement à la fonctionnalité de recherche de Pub/Sub depuis un pipeline Dataflow en cours d'exécution. Pour connaître le workflow recommandé, consultez la page Utiliser Pub/Sub avec Dataflow.