在我的情况下,我试图实现服务器较少的后端,运行耗时很长的计算.这个计算由引用一些外部API的Lambda管理.
在这个请求中,我使用的是具有10秒执行限制的Amazon API网关.然而,Lambda运行大约100秒.
为了避免这种限制,我使用第二个Lambda函数执行这个耗时的计算和报告计算开始.
我看起来非常相似:
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);
该代码通过AWS API网关由数千个客户端浏览器独立执行.
为了向每个特定的客户通知他的Lambda功能执行是否成功完成,我计划使用AWS SQS(因为很长的轮询和一些其他有用的功能开箱即用).
所以我的问题是:
如何在客户端确定队列中的哪个消息属于此特定客户端?还是应该遍历所有的队列,通过每个客户端浏览器中的一些请求ID参数来查找正确的消息?我猜这个方法会在1000个客户端同时等待他们的结果时效率低下.
我明白我可以将结果写入DynamoDB,并通过一些自制的API定期轮询DB的结果.但是有没有任何优雅的解决方案来通知基于浏览器的客户端,基于一些Amazon PaaS解决方案完成耗时的Lambda功能的执行?
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。