我想实现Amazon SNS主题,该主题首先将消息传递到作为主题订阅者的SQS队列,然后执行AWS Lambda函数,该函数也是同一主题的订阅者。然后,Lambda函数可以从SQS队列中读取消息并并行处理其中几个(数百个)。
我的问题是,是否有任何方法可以保证发送到SNS主题的消息首先被传递到SQS队列,然后才传递给Lambda函数?
这样做的目的是扩展到大量消息,而不必为每条消息单独执行Lambda函数。
答案 0 :(得分:4)
为此,如果从云监视警报中使用,则触发lambda可能更好,更有效。将云监视警报设置为SQS上的缓冲区限制,可以激活lambda以启动并处理完整队列。
答案 1 :(得分:1)
目前一个SNS Topic
无法找到您要查找的内容。如果您Lambda
订阅SNS Topic
每次Lambda
收到消息时,SNS Topic
特定SNS Topics
将被执行。
解决方案可能是拥有两个SQS
并将消息发布到第一个消息并让SNS Topic
订阅它。成功向第一个主题提交消息后,您可以向第二个Lambda
发送消息,以执行SNS Topic
来处理第一个SQS
存储到Lambda
的消息。
另一种可能的解决方案可能是上面的,您可以向第二个主题发送一些定期消息来运行订阅的Lambda SQS Workers
。这样您就可以扩展VVC_SQL_STMT :=
'SELECT COLUMN1 ' ||
' FROM( ' ||
' SELECT * ' ||
' FROM ' || VVC_TABLE_NAME ||
' WHERE column2 = :1 ' ||
' ORDER BY DBMS_RANDOM.VALUE) ' ||
' WHERE ROWNUM = 1';
EXECUTE IMMEDIATE VVC_SQL_STMT
INTO VNM_RAND_NUMBER
USING i;
。
答案 2 :(得分:0)
将SQS队列和Lambda函数预订到SNS主题是让Lambda函数以低延迟处理SNS消息的好方法。我刚刚测试过这个过程。每次尝试都会在插入SQS消息后调用lambda函数。我不会期望这种情况总是如此,但它确定了我愿意衡量的最佳延迟问题。它无法保证,您需要一个CloudWatch预定活动来接收任何错过的消息。