[PYTHON] [Es ist lächerlich, den Einstellwert auf Null zu setzen!] Ich erhalte dieselbe Nachricht mehrmals mit SQS.

Während der Implementierung des Abrufprozesses von SQS ist ein Ereignis aufgetreten, bei dem ** dieselbe Nachricht ** gleichzeitig empfangen wurde **.

Der Erklärungscode ist Python, es wird jedoch angenommen, dass das Ereignis in anderen Sprachen / SDKs auftritt.

Was ist passiert

Unten finden Sie den Python-Code, der bis zu 10 Nachrichten aus der SQS-Warteschlange abruft.

Es wird angenommen, dass nur eine Nachricht in der Zielwarteschlange gespeichert ist.


import boto3

#Anfrage an SQS senden
client = boto3.client('sqs')
messages = client.receive_messages(QueueUrl=my-url, MaxNumberOfMessages=10).get('Messages')

Zeigen Sie die empfangene Nachricht an.

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*********

Mit diesem Gefühl bekam ich ** Nachrichten-ID und 3 Artikel mit genau dem gleichen Körper **. Die Anzahl der gleichzeitig zu erfassenden Fälle kann ein oder zwei betragen.

Ursache und Gegenmaßnahme (Vermutung)

Tritt auf, wenn ** Visibility Timeout ** in den Warteschlangeneinstellungen auf 0 gesetzt ist. Dies wurde behoben, indem es auf einen geeigneten Wert größer als 0 geändert wurde.

Amazon SQS Visibility Timeout

SQS ist ein verwalteter Nachrichtenwarteschlangendienst, der Nachrichtendaten hinter den Kulissen verteilt, um die Verfügbarkeit zu erhöhen. Wenn dieses Sichtbarkeitszeitlimit deaktiviert ist, haben wahrscheinlich alle SQS-Server auf die Abfrageanforderung geantwortet.

Da es sich um eine einfache Konfiguration handelte, bei der die Skalierung nicht besonders berücksichtigt wurde, wurde sie entsprechend als "** Ja! Diese Option ist ungültig! **" festgelegt. .. ..

Einstellmethode

Auf dem Konsolenbildschirm

Gehen Sie hier zu [Warteschlangenbetrieb]> [Warteschlangeneinstellungen] ↓ (image.png )

Abfrageanforderung

Sie können eine Anfrage mit Optionen senden, aber ich denke, es ist sicherer, die Einstellungen für die gesamte Warteschlange zu ändern.

Beispiel für ein Python SDK (boto3)

#Anfrage an SQS senden
client = boto3.client('sqs')
messages = client.receive_messages(QueueUrl=my-url, VisibilityTimeout=30)

Recommended Posts

[Es ist lächerlich, den Einstellwert auf Null zu setzen!] Ich erhalte dieselbe Nachricht mehrmals mit SQS.
So registrieren Sie dieselben Daten mehrmals mit einer Eingabe auf dem Verwaltungsbildschirm von Django