[PYTHON] [Il est ridicule de régler la valeur de réglage sur zéro!] Je reçois le même message plusieurs fois avec SQS.

Lors de l'implémentation du processus d'interrogation SQS, j'ai rencontré un événement où ** le même message a été reçu ** en même temps.

Le code d'explication est Python, mais on pense que l'événement se produira dans d'autres langages / SDK.

Qu'est-il arrivé

Vous trouverez ci-dessous le code Python qui récupère jusqu'à 10 messages de la file d'attente SQS.

On suppose qu'un seul message est stocké dans la file d'attente cible.


import boto3

#Envoyer la demande à SQS
client = boto3.client('sqs')
messages = client.receive_messages(QueueUrl=my-url, MaxNumberOfMessages=10).get('Messages')

Affichez le message reçu.

for i, message in enumerate(messages):
    print(i)
    print('MessageId: ' + message['MessageId'])
    print('MD5: ' + message['MD5OfBody'])

# 0
# MessageId: 7d4f2923-****-4d86-87a6-85f20446086a
# MD5: 38d2b0ed81e0200*********
# 1
# MessageId: 7d4f2923-****-4d86-87a6-85f20446086a
# MD5: 38d2b0ed81e0200*********
# 2
# MessageId: 7d4f2923-****-4d86-87a6-85f20446086a
# MD5: 38d2b0ed81e0200*********

Avec ce sentiment, j'ai obtenu ** ID de message et 3 éléments avec exactement le même corps **. Le nombre de cas à acquérir en même temps peut être d'un ou deux.

Cause et contre-mesure (devinez)

Se produit lorsque ** Visibility Timeout ** est défini sur 0 dans les paramètres de la file d'attente. Ce problème a été résolu en le modifiant par une valeur appropriée supérieure à 0.

Délai d'expiration de la visibilité Amazon SQS

SQS est un service de mise en file d'attente de messages géré qui maintient les données de message distribuées en arrière-plan pour augmenter la disponibilité. Si ce délai de visibilité est désactivé, il est probable que tous les serveurs SQS aient répondu à la demande d'interrogation.

Comme il s'agissait d'une configuration simple qui ne tenait pas particulièrement compte de l'échelle, elle a été définie de manière appropriée comme "** Ouais! Cette option n'est pas valide! **". .. ..

Méthode de réglage

Depuis l'écran de la console

Allez dans [Fonctionnement de la file d'attente]> [Paramètres de la file d'attente] ↓ Ici (image.png )

Demande de sondage

Vous pouvez envoyer une demande avec des options, mais je pense qu'il est plus sûr de modifier les paramètres pour toute la file d'attente.

Exemple de SDK Python (boto3)

#Envoyer la demande à SQS
client = boto3.client('sqs')
messages = client.receive_messages(QueueUrl=my-url, VisibilityTimeout=30)

Recommended Posts

[Il est ridicule de régler la valeur de réglage sur zéro!] Je reçois le même message plusieurs fois avec SQS.
Comment enregistrer les mêmes données plusieurs fois avec une seule entrée sur l'écran de gestion de Django