Relire et supprimer définitivement des messages avec la recherche

Une fois que vous avez confirmé la réception des 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é seek étend les fonctionnalités d'abonné en vous permettant de modifier l'état de confirmation des messages de manière 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 pouvez copier l'état de confirmation d'un abonnement vers un autre en utilisant la fonctionnalité de recherche en combinaison avec 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 la fonctionnalité Instantané et recherche

Un instantané Pub/Sub est une vue durable, cohérente et fiable à un moment précis de l'état de confirmation d'un message 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 la création de l'instantané, ainsi que tous les messages publiés dans le sujet après la création de l'instantané.

La durée de vie d'un instantané est déterminée par le travail en attente existant dans l'abonnement source. La durée de vie est de sept jours moins l'âge du plus ancien message non confirmé de l'abonnement. Prenons l'exemple de l'instantané d'un abonnement avec des messages en attente dont le plus ancien message non confirmé date d'un jour. L'instantané expire au bout de six jours. Cette chronologie est nécessaire pour que les instantanés offrent une bonne garantie de distribution "au moins une fois".

La durée de vie maximale possible d'un instantané est de sept jours. Vous ne pouvez pas créer un instantané qui expirera 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. Cette fonctionnalité vous permet de contrôler la manière dont Pub/Sub peut distribuer des messages à partir d'un moment précis ou à partir d'un instantané spécifique.

Pour rechercher à une heure antérieure et rouvrir 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.

Cohérence à terme des opérations de recherche

Les opérations de recherche sont strictement cohérentes en ce qui concerne la garantie de distribution des messages. Cela signifie que tout message qui n'est plus confirmé en fonction de la condition de recherche est assuré d'être distribué une fois l'opération de recherche terminée. Cependant, les messages distribués ne deviennent pas instantanément 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 quelque sorte, la distribution des messages fonctionne comme un système cohérent à terme en ce qui concerne l'opération de recherche ; l'opération peut prendre jusqu'à une minute pour prendre pleinement 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.

Configurer la conservation des messages

Vous pouvez configurer la conservation des messages sur un sujet et configurer l'un de ses abonnements pour conserver les messages confirmés. Vous pouvez configurer la conservation des messages par sujet si vous souhaitez que les messages soient conservés pour une relecture plus longtemps que la durée de conservation des messages configurée sur l'abonnement. Dans ce cas, le stockage des messages est facturé au projet du sujet et au projet associé à l'abonnement, en fonction de leurs paramètres de conservation des messages respectifs.

Si la conservation des messages du sujet n'est pas configurée, un message non confirmé est supprimé de l'abonnement lorsque son ancienneté dépasse la propriété message_retention_duration de l'abonnement. En revanche, si la conservation des messages du sujet est configurée, le message non confirmé n'est supprimé de l'abonnement que lorsque son ancienneté dépasse les message_retention_duration maximales du sujet et de l'abonnement.

Configurer la conservation des messages par sujet

Par défaut, un sujet Pub/Sub ignore les messages dès qu'ils sont confirmés par tous les abonnements associés au sujet. La configuration d'un sujet avec la 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 précédemment confirmés jusqu'à l'élément message_retention_duration du sujet. La conservation des messages par sujet permet également de s'abonner aux messages publiés avant la création d'un abonnement.

Un sujet peut conserver les messages publiés pendant 31 jours maximum (durée configurable par la propriété message_retention_duration du sujet), même après que tous les abonnements associés ont été confirmés. Si la message_retention_duration du sujet est supérieure à la message_retention_duration de l'abonnement, Pub/Sub supprime uniquement un message lorsque son ancienneté dépasse la message_retention_duration du sujet.

Si la conservation des messages par 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 la console Google Cloud, accédez à la page Sujets Pub/Sub.

    Accéder à la page "Sujets"

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

  3. Dans le champ ID du sujet, saisissez un ID pour votre sujet.

  4. Activez l'option Définir la durée de conservation des messages.

    Conservez les paramètres par défaut pour les autres options.

  5. Dans le menu déroulant Durée de conservation des messages, sélectionnez le nombre de jours, d'heures et de minutes de conservation des messages.

  6. Cliquez sur Créer un sujet pour enregistrer le sujet.

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

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

    Accéder à la page "Sujets"

  2. Cliquez sur Modifier en haut de la page des détails.

  3. Pour modifier la durée de conservation, ou activer ou désactiver la conservation des messages, cochez ou décochez l'option 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 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

Configurer la conservation des messages d'abonnement

Pub/Sub commence à conserver les messages pour le compte d'un abonnement lorsque celui-ci est créé. Par défaut, Pub/Sub supprime un message d'un abonnement dès que le message est confirmé. Les messages non confirmés sont conservés pendant sept jours par défaut (configurable par la propriété message_retention_duration de l'abonnement).

Configurer un abonnement pour conserver les messages confirmés (à l'aide de la propriété retain_acked_messages) vous permet de relire les messages précédemment confirmés qui ont été conservés par l'abonnement. Vous pouvez configurer la conservation des messages pour une durée maximale de sept jours dans un abonnement. Cette configuration s'applique aux messages confirmés et non confirmés. Toutefois, les messages peuvent être conservés dans un abonnement pendant plus de sept jours si la durée de conservation des messages configurée sur son sujet est supérieure à sept jours.

Si un abonnement est configuré pour conserver les messages confirmés, les coûts de stockage des messages confirmés conservés par l'abonnement sont facturés sur le projet de l'abonnement.

Console

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

  1. Dans la console Google Cloud, 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 un ID pour votre abonnement.

  4. Dans le menu déroulant Durée de conservation des messages, sélectionnez le nombre de jours, d'heures et de minutes de conservation des messages.

  5. Activez l'option Conserver les messages confirmés. Conservez les paramètres par défaut pour les autres options.

  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 des détails de l'abonnement.

  3. Ajustez la durée de conservation des messages, ou activez ou désactivez la conservation des messages confirmés en cochant ou en décochant le champ 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és, utilisez la commande gcloud pubsub subscriptions create suivante :

gcloud pubsub subscriptions create SUBSCRIPTION_ID
    --retain-acked-messages
    --message-retention-duration=5d

Vous pouvez mettre à jour ce paramètre à l'aide de gcloud pubsub subscriptions update. Cela vous permet également d'activer la conservation des 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 --no-retain-acked-messages

Créer un instantané

Vous pouvez créer un instantané à l'aide de la console, des API Google ou de la Google Cloud CLI.

Console

Pour créer un instantané, procédez comme suit:

  1. Dans Google Cloud Console, accédez à la page Instantanés.

    Accéder à la page Instantanés

  2. Cliquez sur Create snapshot (Créer un instantané).

  3. Dans le champ Sélectionner un abonnement Pub/Sub, sélectionnez un abonnement.

  4. Dans le champ ID de l'instantané, saisissez le nom de l'instantané.

    Pour en savoir plus sur l'attribution de noms aux ressources Pub/Sub, consultez la page Consignes pour nommer un sujet, un abonnement, un schéma ou un instantané.

  5. Cliquez sur Créer pour créer l'instantané.

Vous pouvez également créer un instantané depuis la page Abonnements.

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 codes temporels:

  • Pour supprimer définitivement tous les messages, vous pouvez rechercher un moment futur.

  • Pour relire et retraiter des messages confirmés, recherchez une heure dans le passé.

L'heure de publication du message est générée par les serveurs Pub/Sub (consultez 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.

Vous pouvez rechercher un horodatage à l'aide de la console, des API Google ou de la Google Cloud CLI. Avant de rechercher un horodatage sur un abonnement, assurez-vous que la conservation des messages est activée sur l'abonnement.

Console

Pour rechercher un code temporel, procédez comme suit:

  1. Dans la console Google Cloud, accédez à la page Abonnement.

    Accéder à l'abonnement

  2. Cliquez sur un abonnement pour lequel la conservation des messages est activée.

  3. Sur la page d'informations de l'abonnement, cliquez sur Relire les messages.

  4. Dans la section Rechercher, cliquez sur Aller à un moment antérieur dans le temps.

  5. 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 acceptés, consultez gcloud topic datetimes.

Rechercher un instantané

Vous pouvez relire des messages non confirmés en utilisant un instantané pour rechercher l'un des abonnements du 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 les tâches en attente dans l'abonnement sont trop anciennes et que l'instantané obtenu expire en moins d'une heure, l'opération de recherche échoue.

Vous pouvez rechercher un instantané à l'aide de la console, des API Google ou de la Google Cloud CLI.

Console

Pour rechercher un instantané, procédez comme suit:

  1. Dans la console Google Cloud, accédez à la page Abonnement.

    Accéder à l'abonnement

  2. Cliquez sur un abonnement.

  3. Sur la page d'informations de l'abonnement, cliquez sur Relire les messages.

  4. Dans le champ Seek (Rechercher), cliquez sur To a snapshot (Accéder à un instantané).

  5. Sélectionnez un instantané approprié, puis cliquez sur Rechercher.

gcloud

Pour rechercher un instantané, utilisez 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 identique à 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 avec 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 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 stratégies 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 :

  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.

Rechercher avec une diffusion 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. Pour une distribution effectuée avant l'opération de recherche, tous les accusés de réception échouent. Les opérations de recherche sont cohérentes à terme.

Pour en savoir plus sur les stratégies de nouvelle tentative, consultez la section Distribution "exactement une fois".