In meinem Szenario versuche ich Server-less Backend zu implementieren, das ziemlich lange zeitraubende Berechnungen ausführt. Diese Berechnungen werden von Lambda verwaltet, das sich auf eine externe API bezieht.Informieren Sie Browser-Clients, wenn die Lambda-Funktion mit Amazon SQS ausgeführt wird
Um dies zu beantragen, benutze ich Amazon API Gateway mit 10 Sekunden Ausführungsbeschränkung. Lambda läuft jedoch etwa 100 Sekunden.
Um diese Einschränkung zu vermeiden, verwende ich die 2. Lambda-Funktion, um diese zeitaufwendige Berechnung auszuführen & Bericht, dass die Berechnung gestartet wird.
I sieht sehr ähnlich wie diese:
var AWS = require('aws-sdk');
var colors = require('colors');
var functionName = 'really-long'
var lambda = new AWS.Lambda({apiVersion: '2015-03-31'});
var params = {
FunctionName: functionName,
InvocationType: 'Event'
};
lambda.invoke(params, function(err, data) {
if (err) console.log(err, err.stack); // an error occurred
else console.log(functionName.green + " was successfully executed and returned:\n" + JSON.stringify(data, null, 2).gray); // successful response
});
console.log("All done!".rainbow);
Dieser Code über AWS API-Gateway von Tausenden von Kunden-Browser unabhängig ausgeführt wird.
Um jeden einzelnen Kunden darüber zu informieren, dass seine Ausführung der Lambda-Funktion erfolgreich war, habe ich die Verwendung von AWS SQS geplant (wegen der langen Abfrage und einigen anderen nützlichen Funktionen).
Also meine Frage ist: die Nachricht in der Warteschlange gehört zu diesem bestimmten Client
Wie kann ich auf dem Client bestimmen? Oder sollte ich über alle Warteschlangen iterieren, um in jedem Client-Browser über einen Parameter der Anfrage-ID die richtigen Nachrichten zu finden? Ich denke, dass diese Methode ineffizient sein wird, wenn 1000 Clients gleichzeitig auf ihre Ergebnisse warten werden.
Ich verstehe, dass ich Ergebnisse in DynamoDB zum Beispiel schreiben kann und regelmäßig DB für das Ergebnis über einige hausgemachte API abfragen. Aber gibt es irgendeine elegante Lösung, browserbasierten Client über den Abschluss der Ausführung von zeitraubenden Lambda-Funktion basierend auf einigen Amazon PaaS-Lösung zu benachrichtigen?