Un abonné peut ne pas parvenir à traiter les messages pour plusieurs raisons. Par exemple, il peut rencontrer des problèmes temporaires lors de la récupération des 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 le renvoyer. Cette tentative de redistribution est appelée "stratégie de nouvelle tentative d'abonnement". Vous ne pouvez pas activer ni désactiver cette fonctionnalité. Toutefois, vous pouvez choisir le type de stratégie de nouvelle tentative que vous souhaitez utiliser.
Avant de commencer
- Créez un sujet que vous utiliserez avec votre abonnement et qui contient une stratégie de nouvelle tentative d'abonnement.
Rôles requis
Pour obtenir les autorisations nécessaires pour gérer les sujets et les abonnements, demandez à votre administrateur de vous accorder le rôle IAM Éditeur Pub/Sub(roles/pubsub.editor) dans votre projet.
Pour en savoir plus sur l'attribution de rôles, consultez 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 ressources individuelles. 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 stratégies de nouvelle tentative
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 : redistribution immédiate ou intervalle exponentiel entre les tentatives. Par défaut, les abonnements utilisent la redistribution immédiate.
Redistribution 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 qui ne peuvent pas être confirmés.
Pour résoudre les problèmes de nouvelle livraison immédiate, Pub/Sub vous permet de configurer une stratégie 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 du message, plus de 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 est déclenché par les actions suivantes :
- Lorsqu'un accusé de réception négatif est reçu.
- Lorsque le délai de confirmation d'un message expire.
- L'intervalle exponentiel entre les tentatives n'est appliqué que par message, et non à tous les messages d'un abonnement (global).
- Lorsque vous utilisez l'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 de messages ordonnée).
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é temporaire à traiter certains messages lors de la distribution. La fonctionnalité est appliquée au mieux et chaque message est évalué séparément pour la stratégie de nouvelle tentative.
Nous vous déconseillons d'utiliser cette fonctionnalité pour introduire des retards intentionnels dans la distribution 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 accusé de réception négatif pour un grand nombre de messages.
Si vous devez planifier des distributions, 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 :
- Dans la Cloud de Confiance console, accédez à la page Abonnements Pub/Sub.
Cliquez sur Créer un abonnement.
Dans le champ ID d'abonnement, saisissez un nom.
Pour savoir comment nommer un abonnement, consultez la section Consignes de dénomination d'un sujet ou d'un abonnement.
- Choisissez ou créez un sujet dans le menu déroulant.
L'abonnement reçoit les messages du sujet.
Sélectionnez un Type de distribution.
Sous Stratégie de nouvelle tentative, sélectionnez Réessayer après l'intervalle exponentiel entre les tentatives.
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.
- Cliquez sur Créer.
gcloud
Pour créer un abonnement avec une stratégie d'intervalle exponentiel entre les tentatives, exécutez
la gcloud pubsub create
commande 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: intervalle minimal entre les tentatives pour l'abonnement.MAX_RETRY_DELAY: intervalle maximal entre les tentatives pour l'abonnement.