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 qui ne sont pas accessibles 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 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 des instantanés et de la recherche

Un instantané Pub/Sub est un outil durable, cohérent et fiable vue à un moment précis de l'état de confirmation des messages d'un abonnement. Un instantané enregistre l'état de confirmation de tous les messages d'une dès 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 horodatage spécifique 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 devant devenir non confirmé sur la condition de recherche seront toujours livrées une fois l'opération de recherche réussie. 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 à terme par rapport à l'opération de recherche ; cela peut prendre à moins d'une minute pour que l'opération soit pleinement effective.

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 voudrez peut-être configurer le sujet Conservation des messages si vous souhaitez que les messages soient conservés en vue de leur relecture que la durée de conservation des messages configurée dans l'abonnement. Dans ce le projet du sujet et le projet de l'abonnement sont facturés le stockage des messages en fonction de leurs paramètres respectifs de conservation des messages.

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. Modifiez la durée de conservation, ou activez ou désactivez la conservation des messages en 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 pour le compte d'un abonnement lors de sa création. 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 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. Ce 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 pour les messages confirmés conservés par l'abonnement sont facturés au dans le projet d'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/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 abonnement:

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 du CLI Google Cloud.

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, choisissez 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 immédiatement après avoir créé un abonnement, vous pouvez obtenir une erreur due au délai de propagation de l'abonnement que vous venez de créer.

gcloud

Pour créer un instantané, utilisez la suivi gcloud pubsub snapshots create commande:

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 à venir.

  • Pour relire et traiter à nouveau des messages confirmés, recherchez un dans le passé.

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 du CLI Google Cloud. 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 Vers un moment antérieur.

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

gcloud

Pour rechercher un code temporel, utilisez la fonction suivi gcloud pubsub subscriptions seek commande:

gcloud pubsub subscriptions seek SUBSCRIPTION_ID \
    --time=TIME \

Remplacez les éléments suivants :

  • TIME: l'heure à laquelle vous souhaitez effectuer la 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 relire les messages non confirmés à l'aide d'un instantané pour rechercher des abonnements 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 backlog 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 des détails de l'abonnement, cliquez sur Relire les 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 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 à l'aide de 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.

Effectuer une recherche avec la diffusion 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. Tout accusé de réception effectué avant la demande l'opération échouera. Les opérations de recherche sont cohérentes à terme.

Pour en savoir plus sur les règles de nouvelle tentative, consultez Distribution de type "exactement une fois" :