Stratégie de nouvelle tentative d'abonnement

Un abonné peut ne pas réussir à traiter les messages pour plusieurs raisons. Par exemple, l'abonné peut rencontrer des problèmes temporaires pour récupérer les données nécessaires ou recevoir un message dans un format inattendu.

Si Pub/Sub tente d'envoyer un message, mais que l'abonné ne peut pas en accuser réception, Pub/Sub tente automatiquement de renvoyer le message. Cette tentative de nouvelle distribution est appelée "stratégie de nouvelle tentative d'abonnement". Il ne s'agit pas d'une fonctionnalité que vous pouvez activer ou désactiver. Toutefois, vous pouvez choisir le type de règle de réessai que vous souhaitez utiliser.

Avant de commencer

  • Créez un sujet que vous allez utiliser avec votre abonnement contenant une stratégie de réessai d'abonnement.

Rôles requis

Pour obtenir les autorisations nécessaires pour gérer les thèmes et les abonnements, demandez à votre administrateur de vous accorder le rôle IAM Éditeur Pub/Sub(roles/pubsub.editor) sur votre projet. Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.

Vous pouvez également obtenir les autorisations requises avec des rôles personnalisés ou d'autres rôles prédéfinis.

Vous pouvez configurer le contrôle des accès au niveau du projet et au niveau de chaque ressource. Vous pouvez créer un abonnement dans un projet et l'associer à un sujet situé dans un autre projet. Assurez-vous de disposer des autorisations requises pour chaque projet.

Types de règles pour les nouvelles tentatives

Lorsque vous créez et configurez votre abonnement pour la première fois, vous pouvez choisir d'utiliser l'une des stratégies de nouvelle tentative suivantes : nouvelle remise immédiate ou intervalle exponentiel entre les tentatives. Par défaut, les abonnements utilisent la rediffusion immédiate.

Nouvelle livraison immédiate

Par défaut, Pub/Sub tente de renvoyer le message immédiatement (et potentiellement au même client abonné). Toutefois, si les conditions qui empêchaient l'accusé de réception du message n'ont pas changé, la redistribution immédiate peut entraîner des problèmes. Dans ce cas, il est possible que Pub/Sub renvoie plusieurs messages dont la réception ne peut pas être confirmée.

Pour résoudre les problèmes de nouvelle distribution immédiate, Pub/Sub vous permet de configurer une règle d'intervalle exponentiel entre les tentatives.

Intervalle exponentiel entre les tentatives

L'intervalle exponentiel entre les tentatives vous permet d'ajouter des délais progressivement plus longs entre les nouvelles tentatives. Après le premier échec de distribution, Pub/Sub attend un intervalle minimal avant de réessayer. Pour chaque échec consécutif d'envoi de message, du temps est ajouté au délai, jusqu'à un délai maximal (entre 0 et 600 secondes).

Les intervalles de retard maximal et minimal ne sont pas fixes, et doivent être configurés en fonction de facteurs locaux propres à votre application.

Notez les points suivants concernant l'intervalle exponentiel entre les tentatives :

  • L'intervalle exponentiel entre les tentatives se déclenche lors des actions suivantes :
    • Lorsqu'un accusé de réception négatif est reçu.
    • Lorsque le délai de confirmation d'un message expire.
  • Le délai exponentiel n'est appliqué qu'à chaque message, et non à tous les messages d'un abonnement (global).
  • Lorsqu'il utilise un intervalle exponentiel entre les tentatives, Pub/Sub continue de distribuer d'autres messages, même si les messages précédents ont reçu des accusés de réception négatifs (sauf si vous utilisez la distribution ordonnée des messages).

Utilisez la stratégie de nouvelle tentative pour retarder la distribution et le traitement d'un sous-ensemble de messages afin de tenir compte d'une incapacité transitoire à traiter certains messages lors de leur distribution. Cette fonctionnalité est appliquée selon le principe de l'optimisation. Chaque message est évalué séparément pour la règle de nouvelle tentative.

Nous vous déconseillons d'utiliser cette fonctionnalité pour introduire des délais intentionnels dans la diffusion des messages. Si vous envoyez un accusé de réception négatif (NACK) pour un grand nombre de messages sur un abonnement configuré avec une stratégie de nouvelle tentative, il est possible que certains de ces messages soient distribués avec un intervalle entre les tentatives plus court, voire sans intervalle. Pub/Sub peut également ralentir la distribution de tous les messages si vous envoyez un grand nombre d'accusés de réception négatifs.

Si vous devez planifier des livraisons, envisagez d'utiliser Cloud Tasks.

Configurer un intervalle exponentiel entre les tentatives

Console

Lorsque vous créez un abonnement, vous pouvez configurer une stratégie d'intervalle exponentiel entre les tentatives en procédant comme suit :

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

Accéder aux abonnements

  1. Cliquez sur Créer un abonnement.

  2. Dans le champ ID d'abonnement, saisissez un nom.

Pour savoir comment nommer un abonnement, consultez Consignes de dénomination d'un sujet ou d'un abonnement.

  1. Choisissez ou créez un sujet dans le menu déroulant.

L'abonnement reçoit les messages du sujet.

  1. Sélectionnez un type de diffusion.

  2. Sous Stratégie de nouvelle tentative, sélectionnez Réessayer après l'intervalle exponentiel entre les tentatives.

  3. Saisissez un intervalle minimal entre les tentatives et un intervalle maximal entre les tentatives compris entre 0 et 600 secondes.

Les valeurs par défaut sont de 10 secondes pour l'intervalle minimal et de 600 secondes pour l'intervalle maximal.

  1. Cliquez sur Créer.

gcloud

Pour créer un abonnement avec une stratégie d'intervalle exponentiel entre les tentatives, exécutez la commande gcloud pubsub create suivante.

gcloud pubsub subscriptions create SUBSCRIPTION_ID \
  --topic=TOPIC_ID \
  --min-retry-delay=MIN_RETRY_DELAY \
  --max-retry-delay=MAX_RETRY_DELAY

Remplacez les éléments suivants :

  • SUBSCRIPTION_ID : ID unique de votre abonnement.
  • TOPIC_ID : ID du sujet auquel vous souhaitez associer l'abonnement.
  • MIN_RETRY_DELAY : délai de backoff minimal pour l'abonnement.
  • MAX_RETRY_DELAY : délai de backoff maximal pour l'abonnement.

Étapes suivantes