Délai de visibilité Amazon SQS - Amazon Simple Queue Service

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Délai de visibilité Amazon SQS

Lorsqu'un client reçoit et traite un message à partir d'une file d'attente, le message reste dans celle-ci. Amazon SQS ne supprime pas automatiquement le message. Dans la mesure où Amazon SQS est un système distribué, rien ne garantit que le consommateur recevra réellement le message (par exemple, en cas de problème de connectivité ou de problème de l'application du consommateur). L'utilisateur doit donc supprimer le message de la file d'attente après l'avoir reçu et traité.


	            Délai de visibilité

Juste après réception d'un message, il reste dans la file d'attente. Afin d'empêcher les autres consommateurs de traiter le message à nouveau, Amazon SQS définit un délai de visibilité, une période au cours de laquelle Amazon SQS empêche d'autres consommateurs de recevoir et de traiter le message. Le délai de visibilité par défaut d'un message est de 30 secondes. La valeur minimale est 0 seconde. La valeur maximale est 12 heures. Pour plus d'informations sur la configuration du délai de visibilité pour une file d'attente à l'aide de la console, consultez Configuration des paramètres de file d'attente (console).

Note

Pour les files d'attente standard, le délai de visibilité n'est pas une garantie contre la réception d'un message en double. Pour de plus amples informations, veuillez consulter Une t-least-once livraison.

Les files d'attente FIFO permettent au producteur ou au consommateur d'effectuer plusieurs tentatives :

  • Si le producteur détecte l'échec d'une action SendMessage, il peut réessayer d'en envoyer autant de fois que nécessaire, en utilisant le même identifiant de déduplication des messages. En supposant que le producteur reçoive au moins un accusé de réception avant l'expiration de l'intervalle de déduplication, les tentatives multiples n'affectent pas l'ordre des messages et n'introduisent pas de doublons.

  • Si le consommateur détecte l'échec d'une action ReceiveMessage, il peut réessayer autant de fois que nécessaire, en utilisant le même identifiant de tentative de demande de réception. En supposant que le consommateur reçoive au moins un accusé de réception avant l'expiration du délai de visibilité, les tentatives multiples n'ont aucune incidence sur l'ordre des messages.

  • Lorsque vous recevez un message avec un ID de groupe de messages, aucun autre message correspondant au même ID de groupe de messages n'est renvoyé, sauf si vous supprimez le message ou s'il devient visible.

Messages en cours

Un message Amazon SQS possède trois états de base :

  1. Envoyé vers une file d'attente par un producteur.

  2. Reçu de la file d'attente par un consommateur.

  3. Supprimé de la file d'attente.

Un message est considéré comme étant stocké après qu'il a été envoyé à une file d'attente par un producteur, mais qu'il n'a pas encore été reçu depuis la file d'attente par un consommateur (c'est-à-dire entre les états 1 et 2). Il n'y a pas de quota quant au nombre de messages enregistrés. Un message est considéré comme étant en cours après qu'il a été reçu depuis une file d'attente par un consommateur, mais pas encore supprimé de la file d'attente (c'est-à-dire entre les états 2 et 3). Il existe un quota quant au nombre de messages en cours.

Important

Les quotas qui s'appliquent aux messages en cours ne sont pas liés au nombre illimité de messages stockés.

Pour la plupart des files d'attente standard (en fonction du trafic de la file d'attente et du backlog de messages), il peut y avoir un maximum d'environ 120 000 messages en cours (reçus depuis une file d'attente par un consommateur, mais pas encore supprimés de la file d'attente). Si vous atteignez ce quota tout en utilisant la recherche courte, Amazon SQS renvoie le message d'erreur OverLimit. Si vous utilisez la recherche prolongée, Amazon SQS ne renvoie aucun message d'erreur. Pour éviter d'atteindre cette limite, supprimez les messages de la file d'attente une fois qu'ils ont été traités. Vous pouvez également augmenter le nombre de files d'attente que vous utilisez pour traiter vos messages. Pour demander une augmentation de quota, envoyez une demande de support.

Pour les files d'attente FIFO, il peut y avoir un maximum de 20 000 messages en cours (reçus depuis une file d'attente par un consommateur, mais pas encore supprimés de la file d'attente). Si vous atteignez ce quota, Amazon SQS ne renvoie aucun message d'erreur.

Important

Lorsque vous travaillez avec des files d'attente FIFO, les opérations DeleteMessage échoueront si la demande est reçue en dehors du délai de visibilité. Si le délai de visibilité est de 0 seconde, le message doit être supprimé dans la milliseconde dans laquelle il a été envoyé, sinon, il est considéré comme abandonné. Cela peut amener Amazon SQS à inclure des messages en double dans la même réponse à une opération ReceiveMessage si le paramètre MaxNumberOfMessages est supérieur à 1. Pour plus de détails, consultez Comment fonctionne l'API FIFO Amazon SQS.

Définition du délai de visibilité

Le délai de visibilité commence lorsque Amazon SQS renvoie un message. Pendant ce temps, le consommateur traite et supprime le message. Toutefois, si le consommateur rencontre un échec avant de supprimer le message et que votre système n'appelle pas l'action DeleteMessage pour ce message avant l'expiration du délai de visibilité, le message devient visible pour les autres consommateurs et est reçu à nouveau. Si un message ne doit être reçu qu'une seule fois, votre consommateur doit le supprimer avant l'expiration du délai de visibilité.

Pour chaque file d'attente Amazon SQS, le délai de visibilité par défaut est de 30 secondes. Vous pouvez modifier ce paramètre pour toute la file d'attente. Généralement, vous devez configurer le délai de visibilité en fonction du temps maximal nécessaire à votre application pour traiter et supprimer un message de la file d'attente. Lors de la réception des messages, vous pouvez également définir un délai de visibilité qui leur est spécifique, sans modifier le délai de visibilité de toute la file d'attente. Pour en savoir plus, consultez les bonnes pratiques dans la section Traitement des messages en temps opportun.

Si vous ne savez pas combien de temps il faut pour traiter un message, créez une pulsation pour votre processus de consommateur : spécifiez le délai de visibilité initial (par exemple, 2 minutes) puis, tant que votre client travaille sur le message, continuez à prolonger le délai de visibilité de 2 minutes, toutes les minutes.

Important

Le délai maximal de visibilité est de 12 heures à compter de l'heure où Amazon SQS reçoit la demande ReceiveMessage. L'extension du délai d'attente de visibilité ne réinitialise pas le maximum de 12 heures.

En outre, il se peut que vous ne puissiez pas régler le délai d'expiration d'un message individuel sur 12 heures (par exemple, 43 200 secondes) puisque la demande ReceiveMessage déclenche le temporisateur. Par exemple, si vous recevez un message et que vous définissez immédiatement le maximum de 12 heures en envoyant un appel ChangeMessageVisibility avec VisibilityTimeout défini sur une durée égale à 43 200 secondes, il échouera probablement. En revanche, l'utilisation d'une valeur de 43 195 secondes fonctionnera, à moins qu'il n'y ait un délai important entre la demande du message via ReceiveMessage et la mise à jour du délai de visibilité. Si votre client a besoin de plus de 12 heures, envisagez d'utiliser Step Functions.

Modification du délai de visibilité d'un message

Lorsque vous recevez un message provenant d'une file d'attente et que vous commencez à le traiter, le délai de visibilité de cette dernière peut être insuffisant (par exemple, vous pouvez avoir besoin de traiter et supprimer un message). Pour raccourcir ou rallonger le délai de visibilité d'un message, spécifiez une nouvelle valeur à l'aide de l'action ChangeMessageVisibility.

Par exemple, si le délai d'expiration par défaut pour une file d'attente est de 60 secondes, que 15 secondes se sont écoulées depuis que vous avez reçu le message, et que vous envoyez un appel ChangeMessageVisibility avec VisibilityTimeout défini sur 10 secondes, les 10 secondes commençant à partir du moment que vous effectuez l'appel ChangeMessageVisibility. Par conséquent, toute tentative de modifier le délai de visibilité ou de supprimer ce message 10 secondes après que vous avez initialement modifié le délai de visibilité (un total de 25 secondes) peut entraîner une erreur.

Note

Le nouveau délai de visibilité prend effet à partir du moment où vous appelez l'action ChangeMessageVisibility. De plus, le nouveau délai s'applique uniquement à la réception spécifique de ce message. ChangeMessageVisibility n'a pas d'incidence sur le délai de visibilité des réceptions ou des files d'attente ultérieures.

Désactivation du délai de visibilité d'un message

Lorsque vous recevez un message à partir d'une file d'attente, vous ne souhaitez pas toujours le traiter et le supprimer. Amazon SQS vous permet de mettre fin au délai de visibilité pour un message spécifique. Dans ce cas, les autres composants du système voient immédiatement le message et peuvent le traiter.

Pour désactiver le délai de visibilité d'un message après avoir appelé ReceiveMessage, appelez ChangeMessageVisibility en définissant VisibilityTimeout sur 0 seconde.