2017-04-19 43 views
0

我有一个NodeJS端点,它接收从报告引擎收集数据的请求。 为了保持请求端点清晰,并且由于生成的一些报告只有几个步骤(收集数据 - >汇编报告 - >转换为PDF - >电子邮件到相关人员)我想将作业本身的入站请求分开。使用AWS SQS处理长查询

使用AWS.SQS我可以接受请求,把变量放到SQS和响应与200/201

什么是一些围绕在另一端拿起这份工作了更好的做法? 如果我要触发一个lambda函数,那么在200/201可以发送之前,我必须等待该函数完成吗?或可我:

Accept Request -> 
Job to SQS -> 
Initiate Lamba function -> 
200 Response. 

或者什么其他选择将可用于分离从处理本身的入站请求?

回答

2

这里有几个选项:

  1. 插入您的SQS队列请求并立即返回200响应。在EC2服务器上进行轮询SQS队列的进程,并在SQS中收到消息时执行查询。
  2. 异步调用Lambda函数,向其传递执行查询所需的属性,并立即返回200响应。由于您异步调用Lambda函数,因此调用Lambda函数的NodeJS代码不会等待函数完成。
  3. #2的替代方法是将请求发送到SNS主题,并将SNS主题配置为调用Lambda函数。如果您使用Lambda,这可能是最好的方法,因为如果由于某种原因Lambda函数失败,SNS将重试。

我不建议将SQS与Lambda结合使用,因为这两个服务集成得并不好。另一方面,SNS与Lambda很好地结合在一起。

此外,您需要确保您的Lambda函数调用可以在5分钟内完成,因为这是Lambda函数可以执行的最大时间。如果您需要单独运行超过5分钟的步骤,则需要使用EC2或ECS。

我认为AWS Step Functions可能很适合您的使用情况。

+0

太棒了,异步的Lambda函数就是我想要去的地方。我可以使用云计算手表告诉我工作是否超过了5分钟的门槛。 - 感谢您的帮助! –