Pourquoi ma file d'attente FIFO Amazon SQS ne renvoie-t-elle pas tous les messages ou les messages des autres groupes de messages ?

Lecture de 5 minute(s)
0

Ma file d'attente FIFO (premier entré, premier sorti) Amazon Simple Queue Service (Amazon SQS) ne renvoie pas certains messages lorsque j'appelle l'API ReceiveMessage.

Résolution

Lorsque vous utilisez des files d'attente FIFO, vous ne pouvez pas demander à recevoir des messages provenant d'un identifiant de groupe de messages spécifique. Vous ne pouvez pas non plus filtrer les résultats d'un appel d'API ReceiveMessage de façon à ne renvoyer que les messages d'un seul groupe de messages à la fois.

Lorsque vous spécifiez un paramètre MaxNumberOfMessages dans l'appel d'API ReceiveMessage, SQS renvoie autant de messages que possible du même ID de groupe de messages. L'appel d'API ReceiveMessage peut également renvoyer des messages provenant d'autres groupes de messages disponibles.

Si vous utilisez les files d'attente FIFO, lorsque vous recevez des messages appartenant à un ID de groupe de messages particulier, suivez les consignes ci-dessous :

  • Vous devez supprimer les messages appartenant à l'ID de groupe de messages actuel avant de pouvoir recevoir d'autres messages dans le même ID de groupe de messages.
  • En effet, les messages reçus mais pas encore supprimés sont en cours d'envoi. Or, les messages en cours d'envoi bloquent la distribution des messages disponibles au sein du même groupe de messages.
  • Une cause courante pouvant expliquer la présence de messages en cours d'envoi est l'échec inattendu du client. Toutefois, ce problème peut également se produire lorsque la fonction client AWS Lambda en aval a rencontré des exceptions ou a atteint sa simultanéité maximale.
  • L'API ChangeMessageVisibility peut prolonger ou écourter le délai de visibilité des messages en cours d'envoi.
  • Ainsi, pour autoriser la retransmission des messages, vous pouvez attendre que le délai de visibilité des messages expire.

Quelles que soient les files d'attente FIFO et les limites de quotas Amazon SQS que vous utilisez, vous devez respecter les consignes suivantes :

  • Les files d'attente FIFO doivent contenir un maximum de 20 000 messages en cours d'envoi.
    Remarque : Amazon SQS ne renvoie pas de messages d'erreur dépassant les limites de quota.
  • Les files d'attente FIFO peuvent traiter jusqu'à 300 transactions par seconde (TPS) sans activer le haut débit. Les requêtes supérieures à 300 TPS génèrent l'erreur « ThrottlingException » même si les messages de la file d'attente sont disponibles.
  • Les messages de file d'attente FIFO SQS sont stockés dans des partitions. Chaque partition prend en charge jusqu'à 300 TPS pour les opérations d'envoi, de réception et de suppression. Pour plus d'informations, consultez la section Optimisation de l'utilisation des partitions.
  • Pour les files d'attente FIFO à haut débit, il est possible de partager une partition avec plusieurs groupes de messages. Si un groupe de messages d'une partition dépasse 300 TPS, la limitation empêche la distribution des messages des autres groupes.
  • Dans une file d'attente FIFO, le nombre de transactions à haut débit par seconde varie en fonction de la région AWS. Pour plus d'informations, consultez les Quotas de messages.

Pour réduire la limite de débit Amazon SQS dans les files d'attente FIFO, suivez ces directives :

Pour déterminer le groupe de messages disponibles, une file d'attente FIFO examine les 20 000 premiers messages. Si les groupes de messages figurant dans les 20 000 premiers messages sont bloqués en raison de messages en cours d'envoi, les messages appartenant aux autres groupes figurant au-delà des 20 000 premiers ne seront pas renvoyés. Pour plus d'informations, consultez la section Éviter d'avoir un important backlog de messages portant le même identifiant de groupe.

Exemple A

Une file d'attente FIFO contient un total de 20 001 messages. Les 20 000 premiers messages appartiennent au groupe de messages 1 et le dernier au groupe de messages 2. Lorsque vous tentez de recevoir des messages de la file d'attente, vous ne recevez qu'un message du groupe 1. Tout appel d'API ReceiveMessage consécutif ne renvoie que des réponses vides. Cela se produit parce que la file d'attente FIFO n'examine que les messages appartenant au groupe 1, qui se trouve bloqué par l'appel en cours.

Exemple B

Une file d'attente FIFO contient un total de 20 000 messages. Les 19 999 premiers messages appartiennent au groupe de messages 1 et le dernier au groupe de messages 2. Lorsque vous tentez de recevoir des messages de la file d'attente, le premier appel ReceiveMessage renvoie un message appartenant au groupe 1. Le deuxième appel ReceiveMessage renvoie un message appartenant au groupe 2. Tout appel ReceiveMessage consécutif renvoie des réponses vides parce que les deux groupes sont désormais bloqués par les appels en cours.

Informations connexes

Files d'attente FIFO (premier entré, premier sorti) Amazon SQS

Utilisation de l'ID du groupe de messages Amazon SQS

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 5 mois