Nel mio scenario sto cercando di implementare il server meno backend che esegue calcoli che richiedono molto tempo. Questo calcolo è gestito da Lambda che fa riferimento ad alcune API esterne.Informa i client del browser quando la funzione Lambda viene eseguita utilizzando Amazon SQS
In caso di richiesta, sto utilizzando Amazon API Gateway che ha una limitazione di esecuzione di 10 secondi. Tuttavia Lambda corre circa 100 secondi.
Per evitare questa limitazione, sto utilizzando la 2a funzione Lambda per eseguire questo calcolo che richiede tempo & segnala che il calcolo è stato avviato.
mi sembra molto simile a questo:
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);
Questo codice viene eseguito su AWS gateway API da migliaia di clienti browser in modo indipendente.
Per informare ogni singolo cliente che la sua esecuzione della funzione Lambda è stata eseguita correttamente, mi sono proposto di utilizzare AWS SQS (a causa del polling lungo e alcune altre utili funzionalità fuori dalla scatola).
Quindi la mia domanda è:
Come è possibile determinare sul client, che messaggio nella coda appartiene a questo particolare cliente? O dovrei scorrere tutte le code per trovare i messaggi corretti con qualche parametro ID richiesta in ogni browser client? Immagino che questo metodo sarà inefficiente quando 1000 client saranno contemporaneamente in attesa dei loro risultati.
capisco che posso scrivere i risultati al DynamoDB ad esempio e periodicamente il polling DB per il risultato tramite alcune API fatta in casa. Ma c'è una soluzione elegante per notificare al client basato sul browser il completamento dell'esecuzione della funzione Lambda che richiede tempo basata su una soluzione Amazon PaaS?