J'ai émis l'appel d’API ReceiveMessage à ma file d'attente Amazon Simple Queue Service (Amazon SQS), mais aucun message n'a été renvoyé.
Brève description
Une fois que vous avez utilisé l'appel d'API SendMessage ou SendMessageBatch pour envoyer des messages à la file d'attente Amazon SQS, l'appel d'API ReceiveMessage peut les récupérer. Lorsque l'appel d'API ReceiveMessage ne trouve aucun message dans la file d'attente, il renvoie un résultat de réception vide.
Remarque : Le paramètre MaxNumberOfMessages indique que le nombre maximal de messages renvoyés est de 10 et que la valeur par défaut est 1.
Pour plus d'informations, consultez la section Cycle de vie des messages.
Résolution
Confirmer que le message a été envoyé
Utilisez la métrique NumberOfMessagesSent d’Amazon CloudWatch pour vérifier que les messages ont été envoyés à la file d’attente Amazon SQS. Vous pouvez utiliser les actions de l'API SendMessage ou SendMessageBatch pour vérifier les messages envoyés :
Vérifier la déduplication des messages
Étant donné que les files d'attente FIFO (First-In-First-Out) Amazon SQS n'introduisent pas de messages dupliqués, elles peuvent être dédupliquées. Vérifiez la déduplication des messages pour vous assurer que les messages sont envoyés dans l'intervalle de déduplication de 5 minutes.
Vérifier l’existence de retards de réception des messages
Les files d'attente Amazon SQS que vous configurez comme files d'attente à retardement sont reportées pendant la durée de la période de retard. Les messages que vous envoyez à l'aide de temporisateurs de messages ne sont pas visibles tant que le délai n'est pas écoulé.
Pour vérifier si vous avez configuré la file d'attente avec un retard de distribution ou un temporisateur de messages, utilisez la métrique CloudWatch ApproximateNumberOfMessagesDelayed.
Vérifier le mode d’interrogation
Un message peut être envoyé à la file d'attente SQS, mais il n'est pas disponible pour l’interrogation. Pour plus d'informations sur l’interrogation Amazon SQS, consultez la section Utilisation du mode d’interrogation approprié.
Interrogation courte
Les réponses à l’interrogation courte sont renvoyées immédiatement, même si la requête n'a trouvé aucun message. Amazon SQS échantillonne un sous-ensemble de ses serveurs et renvoie des messages provenant uniquement de ces serveurs. Pour plus d'informations, consultez la section Consommation de messages via l’interrogation courte.
Interrogation longue
L’interrogation longue utilise tous ses serveurs pour interroger les messages. Amazon SQS envoie une réponse après avoir collecté au moins un message disponible, jusqu'au nombre maximal spécifié. Une réponse vide n'est renvoyée que si le temps d'attente de l’interrogation expire. Lorsqu'une file d'attente contient des messages qui spécifient une valeur faible pour le temps d'attente ReceiveMessage, vous pouvez recevoir des réponses vides. Pour plus d'informations, consultez la section Consommation de messages via l’interrogation longue.
Vérifiez si un message provenant du même ID de groupe est en cours
L'ordre des messages d'une file d'attente FIFO est maintenu au niveau du groupe de messages. Les messages reçus avec un ID de groupe de messages ne renvoient plus de messages pour le même ID de groupe, sauf si vous supprimez le message ou s'il devient visible. Un message peut être envoyé dans la file d'attente, mais il peut ne pas être disponible lorsqu'il est en cours ou invisible.
Pour vérifier si le message correspondant à l'ID de groupe est visible ou invisible, utilisez les métriques CloudWatch NumberOfMessagesReceived ou ApproximateNumberOfMessagesNotVisible.
Pour de plus amples informations, consultez la section Pourquoi ma file d'attente FIFO Amazon SQS ne renvoie-t-elle pas tous les messages ou les messages des autres groupes de messages ?
Vérifier que le message est disponible ou visible
Si un autre consommateur a interrogé le message et que celui-ci est en cours ou invisible, d'autres sondages peuvent renvoyer un message de réception vide. Pour vérifier s'il n'existe aucun message disponible à recevoir, utilisez les métriques CloudWatch ApproximateNumberOfMessagesVisible ou ApproximateNumberOfMessagesNotVisible.
Vérifier si la file d'attente est vide
Pour déterminer si une file d'attente est vide, utilisez l’interrogation longue pour appeler l'API ReceiveMessage. Vous pouvez également utiliser les métriques CloudWatch ApproximateNumberOfMessagesVisible, ApproximateNumberOfMessagesNotVisible et ApproximateNumberOfMessagesDelayed. Si toutes les valeurs des métriques sont définies sur 0 pendant plusieurs minutes, la file d'attente est vide.
Pour plus d'informations, consultez la section Confirmer qu'une file d'attente est vide.
Résolution de problèmes à l’aide d’AWS Support
Si aucune des étapes de résolution de problèmes ne permet de résoudre le problème, contactez AWS Support. Dans votre communication avec AWS Support, incluez l’ID de requête et l’horodatage avec le fuseau horaire de la requête de message.
Informations connexes
Comment puis-je savoir qui a consommé mes messages de file d'attente Amazon SQS ?
Comment puis-je éviter un backlog croissant dans ma file d'attente Amazon SQS ?
Démarrage avec les files d'attente FIFO Amazon SQS