2012-04-17 12 views
5

Ich habe eine kleine Gruppe von Nachrichten in einer SQS-Warteschlange, die nicht gelöscht werden, obwohl eine Löschanforderung, die an den AWS-Endpunkt gesendet wird, mit einer 200-Antwort zurückkehrt. Die Nachrichten werden von meiner Anwendung verarbeitet, und die Löschanforderung wird ebenfalls gesendet.SQS-Nachrichten, die nicht gelöscht werden

Ich verwende das Java AWS SDK 1.3.6.

Hat jemand anderes dieses Problem erlebt?

+0

Sind diese SQS-Nachrichten überhaupt nicht gelöscht oder dauert es nur ein paar Sekunden? Könnten Sie uns etwas Code zeigen? – Daan

+0

Hallo Daan. Sie werden nie gelöscht, oder zumindest sind sie nicht in den letzten Stunden gewesen. Ich könnte Ihnen etwas Code zeigen, aber es ist nur die regelmäßige Verwendung des AWS-SDK, also gibt es nicht viel Sinn! –

+0

Hmm, ich hatte dieses Problem nie. Können Sie sie manuell von der AWS-Webverwaltungskonsole löschen? Betrifft dies alle Ihre SQS-Warteschlangen oder nur diese? Wenn Sie nur einen haben, können Sie versuchen, eine neue Warteschlange zu erstellen und zu überprüfen, ob derselbe Code zum Löschen von Nachrichten aus dieser Warteschlange verwendet werden kann. Auf der Statusseite des AWS-Diensts werden keine Probleme angezeigt. Daher glaube ich nicht, dass SQS sich abrackert. Könnte aber sein. – Daan

Antwort

9

Whoops - die Warteschlange wurde versehentlich auf defaultVisibilityTimeout=0 gesetzt. Wenn Sie dies auf einen positiven Wert setzen, wird das Problem behoben.

Dies wirft noch ein paar Fragen aber:

  1. Warum nur, dass dies einige Nachrichten beeinflussen? Vielleicht dauerte die Bearbeitung länger?
  2. Warum hat Amazon 200 zum Löschen zurückgegeben, wenn die Nachrichten nicht gelöscht wurden?
  3. War die Löschung scheitern, weil sie außerhalb des 0-Sekunden-Fenster fiel (in diesem Fall warum alle Anfragen Löschung erfolgreich sein?), Oder haben sie scheitern, weil ein anderer Verbraucher ihnen durch die Zeit der Löschanforderung war gepflückt hatte empfangen?
+0

Hmm. Das ist mysteriös. Ich kenne auch die Antworten auf diese Fragen nicht, aber ich würde gerne hören, ob es jemanden gibt, der das tut. Vielen Dank für die gemeinsame Nutzung der Lösung! – Daan

+0

Ich erlebe genau das Gleiche mit dem JavaScript SDK. Mein Timeout war ebenfalls 0, aber das Erhöhen hat nicht geholfen. Ich bekomme auch Erfolgsmeldungen, aber nur wenn ich über die AWS-Konsole lösche funktioniert es. Irgendwelche Updates von irgendjemandem? –

+0

@Daan können Sie meine Antwort überprüfen und bestätigen, dass es der Fall ist? Vielen Dank ! –

1

Offizielle Dokumentation (Version 1.9.13)

WICHTIG: Es ist möglich, eine Meldung angezeigt wird, auch nachdem Sie sie gelöscht haben. Dies kann in seltenen Fällen auftreten, wenn einer der Server , der eine Kopie der Nachricht speichert, nicht verfügbar ist, wenn Sie die Nachricht anfordern, um die Nachricht zu löschen. Die Kopie verbleibt auf dem Server und kann bei einer nachfolgenden Empfangsanforderung möglicherweise erneut an Sie gesendet werden. Sie sollten erstellen Sie Ihr System zu idempotent, so dass das Empfangen einer bestimmten Nachricht mehr als einmal kein Problem ist.

+0

Eine Lösung besteht darin, das Sichtbarkeits-Timeout zu verlängern (idealerweise programmgesteuert). –

Verwandte Themen