Rouvrir et supprimer définitivement des messages avec la recherche

Une fois que vous avez confirmé la réception des messages dans Pub/Sub, ils 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 fonctionnalité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 pouvez 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 code temporel.

Présentation de l'instantané et de la recherche

Un instantané Pub/Sub est une vue durable, cohérente et fiable à un point précis dans le temps de l'état de confirmation (ack) 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 la création de l'instantané.

La durée de vie d'un instantané est déterminée par le retard existant de l'abonnement source. La durée de vie est égale à sept jours moins l'âge du plus ancien message non confirmé 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 d'un instantané est de sept jours. Vous ne pouvez pas créer d'instantané qui expirerait moins d'une heure après sa création.

La fonctionnalité de recherche vous permet de rechercher un instantané ou un code temporel spécifique pour un abonnement. Cette fonctionnalité vous permet de contrôler la façon dont Pub/Sub peut distribuer des messages à partir d'un moment spécifique ou 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 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é 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 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.

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 du sujet si vous souhaitez que les messages soient conservés pendant une durée plus longue que celle définie pour l'abonnement. Dans ce cas, le projet de sujet et le projet de l'abonnement sont facturés pour le stockage de messages en fonction de leurs paramètres de conservation de message 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 permet de gagner en flexibilité, en permettant à tout abonnement associé au sujet de revenir en arrière et de relire les messages précédemment confirmés jusqu'à sa message_retention_duration. 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. Utilisez le menu déroulant Durée de conservation des messages pour sélectionner 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. Ajustez la durée de conservation des messages ou activez/désactivez la conservation des messages en cochant ou en décochant 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 au nom d'un abonnement lors de sa création. Par défaut, Pub/Sub supprime un message d'un abonnement dès qu'il est confirmé. Les messages non confirmés sont conservés par défaut pendant sept jours (configurable par la propriété message_retention_duration de l'abonnement).

La configuration d'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 conservés par l'abonnement. Vous pouvez configurer les messages pour qu'ils soient conservés pendant 31 jours maximum dans un abonnement. Cette configuration s'applique aux messages confirmés et non confirmés.

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. Utilisez le menu déroulant Durée de conservation des messages pour sélectionner 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/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 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 Sélectionner un abonnement Pub/Sub, sélectionnez un abonnement.

  4. Dans le champ Snapshot ID (ID de l'instantané), saisissez un nom pour l'instantané.

    Pour savoir comment nommer des ressources Pub/Sub, consultez les consignes de dénomination d'un sujet, d'un abonnement, d'un schéma ou d'un instantané.

  5. 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 rencontrer une erreur en raison du délai de propagation de l'abonnement nouvellement créé.

gcloud

Pour créer un instantané, exécutez 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 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 code temporel à l'aide de la console, des API Google ou de la Google Cloud CLI. Avant de rechercher un code temporel 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 à "Abonnement"

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

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

  4. Pour Rechercher, cliquez sur Un moment antérieur.

  5. Sélectionnez une date et une heure appropriées, puis cliquez sur Rechercher.

gcloud

Pour rechercher un code temporel, exécutez 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 la section Date et heure gcloud.

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 de l'abonnement est trop ancien et que l'instantané obtenu expirera dans 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 à "Abonnement"

  2. Cliquez sur un abonnement.

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

  4. Pour Rechercher, cliquez sur À un instantané.

  5. 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 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 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.

Recherche avec distribution de type "exactement une fois"

Si vous recherchez des messages dans un abonnement avec un envoi "exactement une fois", Pub/Sub renvoie les messages précédemment confirmés qui sont éligibles à l'envoi. Toute confirmation d'une diffusion effectuée avant l'opération de recherche échouera. Les opérations de recherche sont cohérentes à terme.

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