Amazon SQS prend en charge deux modes d'interrogation pour les messages disponibles: interrogation courte et interrogation longue. Avec une longue interrogation, le consommateur spécifie un délai d'expiration de 1 à 20 secondes pour attendre les messages disponibles.
Selon la documentation :
Par défaut, Amazon SQS utilise l'interrogation courte , interrogeant uniquement un sous-ensemble de ses serveurs (basé sur une distribution aléatoire pondérée), pour déterminer si des messages sont disponibles pour une réponse.
L'interrogation longue offre les avantages suivants:
- Éliminez les réponses vides en permettant à Amazon SQS d'attendre qu'un message soit disponible dans une file d'attente avant d'envoyer une réponse. À moins que la connexion n'expire, la réponse à la demande
ReceiveMessage
contient au moins un des messages disponibles, jusqu'au nombre maximal de messages spécifié dans l'actionReceiveMessage
.- Éliminez les fausses réponses vides en interrogeant tous les serveurs Amazon plutôt que les sous-ensembles d'Amazon SQS.
- Renvoyez les messages dès qu'ils sont disponibles.
Les caractéristiques ci-dessus font que les longs sondages semblent plutôt bons. Y a-t-il donc un cas d'utilisation où une courte interrogation est préférable?
En particulier, pour les files d'attente à haut débit, l'interrogation courte est-elle plus rapide que l'interrogation longue?
Un scrutin long est presque toujours préférable à un scrutin court. Voici deux cas d'utilisation où une courte interrogation peut être souhaitable (donnée dans la FAQ SQS):
De SQS FAQ :
Dans presque tous les cas, l'interrogation longue d'Amazon SQS est préférable à l'interrogation courte. Les requêtes d'interrogation longue permettent à vos consommateurs de file d'attente de recevoir des messages dès leur arrivée dans votre file d'attente tout en réduisant le nombre d'instances de ReceiveMessageResponse vides renvoyées.
L'interrogation longue d'Amazon SQS se traduit par de meilleures performances à un coût réduit dans la majorité des cas d'utilisation. Cependant, si votre application attend une réponse immédiate d'un appel de ReceiveMessage, vous ne pourrez peut-être pas profiter de l'interrogation longue sans quelques modifications de votre application.
Par exemple, si votre application utilise un seul thread pour interroger plusieurs files d'attente, le passage de l'interrogation courte à l'interrogation longue ne fonctionnera probablement pas, car le thread unique attendra le délai d'expiration de l'interrogation longue sur n'importe quel files d'attente vides, retardant le traitement des files d'attente pouvant contenir des messages.
Dans une telle application, il est recommandé d'utiliser un seul thread pour traiter une seule file d'attente, ce qui permet à l'application de profiter des avantages qu'offre Amazon SQS long polling.