Wie kann ich den Nodejs-Server auf AWS SQS aufmerksam machen?

8

bevor ich das Problem im Detail erkläre, erzähle ich Ihnen meine derzeitige Vorgehensweise.

Ich habe ein js-Skript, das setInterval () ausführt. und jedes Intervall werde ich SQS anrufen, um die Nachricht aus der Warteschlange zu bekommen. Wenn es eine Nachricht gibt, dann verarbeite ich sie.
so wird es unendlich laufen, bis ich den Prozess töte.

Ich habe auch vorher einen Knotenserver gebaut (unter Verwendung des Beispiels in der nodejs.org)

Also, was ich mich wundere, ist, .. anstatt die setInterval regelmäßig auszuführen. Gibt es eine Möglichkeit, dass, wenn es eine neue Nachricht in der SQS gibt, dann wird ein Ereignis ausgelöst und die Nachricht verarbeitet?

    
murvinlai 02.02.2011, 00:45
quelle

4 Antworten

7

Diese Frage ist über 2 Jahre alt. Aber es gibt einen viel besseren Weg als das Ändern des Abfrageintervalls. Setzen Sie die Wartezeit für Nachrichtenempfang Ihrer Warteschlange stattdessen auf maximal 20 Sekunden. Dann können Sie fortlaufende Abfragen durchführen, aber nur 3 Anfragen pro Minute machen, solange die Warteschlange leer ist. Wenn sich Daten in der Warteschlange befinden, erfolgt die Antwort sofort.

    
bvs 17.06.2013 13:48
quelle
6

Nein. Sie müssen eine Nachricht von SQS anfordern.

Sehen Sie sich SNS an, wenn Sie wirklich Push-Benachrichtigungen benötigen. SNS funktioniert gut, wenn Sie Ihrem Server einen Hinweis geben möchten, SQS abzufragen, nachdem Sie der Warteschlange eine Nachricht hinzugefügt haben.

    
Uriah Carpenter 02.02.2011 04:00
quelle
3

SQS bietet keine Benachrichtigung, aber wenn eine neue Nachricht in der SQS vorhanden ist, könnten Sie, was auch immer die Nachricht erstellt hat, auch node.js drücken und die Abfrage für einige Minuten aktivieren. Sie haben vielleicht nicht die Kontrolle darüber, was in Ihrer Warteschlange liegt, aber wenn dies der Fall ist, würde ich auch Ihre node.js dazu veranlassen, mit der Abfrage der Warteschlange zu beginnen.

Wenn Sie aufgrund von Kosten Bedenken hinsichtlich der Abstimmung haben, können Sie das tun, was ich getan habe. - Ändern Sie dynamisch Ihre Umfragezeit. Meine SQS-Warteschlangen werden alle 5 Sekunden abgefragt. Wenn ein Knoten eine Nachricht erkennt, wird die Abrufzeit für einige Sekunden sofort auf 200 ms gesenkt. Wenn es eine Nachricht in der Warteschlange nicht erkennt, verlangsamt es 50 ms jede leere Anfrage, bis die 5-Sekunden-Umfrage erneut getroffen wird.

Diese erste Anfrage wird langsam sein, etwas, womit Sie nicht umgehen können. Um das zu bekämpfen, habe ich die Abfragezeiten alle paar Minuten nach dem Zufallsprinzip erhöht. Mit ein paar Knoten Polling sind die Reaktionszeiten in der Regel sehr schnell.

    
Hairgami_Master 12.10.2011 16:23
quelle
2

Sie können SQS Long Polling verwenden, um dies zu erreichen. Beim langen Abruf wird die Anzahl leerer Antworten verringert, da Amazon SQS warten kann, bis eine Nachricht in der Warteschlange verfügbar ist, bevor eine Antwort gesendet wird. Dies wird auch die Kosten für SQS erheblich reduzieren.

Um das zu vereinfachen, gibt es eine ausgezeichnete Bibliothek namens sqs-consumer . Es ermöglicht Ihnen, nur eine Funktion zu definieren, die eine SQS-Nachricht empfängt und einen Rückruf aufruft, wenn die Nachricht verarbeitet wurde:

%Vor%

Unter der Haube macht es sich schon die lange Polling-Technik zunutze, die oben beschrieben wurde.

    
benjiman 27.06.2017 10:36
quelle

Tags und Links