[英]Invoke AWS Lambda SNS event only after SQS subscription on same topic has been processed
我想实现一个Amazon SNS主题,该主题首先将消息传递到作为该主题的订阅者的SQS队列,然后执行也是同一主题的订阅者的AWS Lambda函数。 然后,Lambda函数可以从SQS队列中读取消息并并行处理其中的几个消息(数百个)。
我的问题是,是否有任何方法可以确保发送到SNS主题的消息首先传递到SQS队列,然后才传递给Lambda函数?
这样做的目的是扩展到大量消息,而不必为每个消息单独执行Lambda函数。
为此,如果从云监视警报中使用,则触发lambda会更好,更有效。 将云监视警报设置为在SQS上的缓冲区限制时,可能会触发lambda以启动和处理完整队列。
一个SNS Topic
当前无法实现您所需要的。 如果您为Lambda
订阅SNS Topic
,则每当SNS Topic
收到一条消息时,并行执行特定的Lambda
。
解决方案可能是有两个SNS Topics
然后将消息发布到第一个,然后让您的SQS
订阅它。 成功向第一个主题提交消息后,您可以向第二个SNS Topic
发送一条消息,以执行Lambda
来处理存储到SQS
的第一个SNS Topic
消息。
另一个可能的解决方案可能是上述方法,您可以只向第二个主题发送一些定期消息以运行订阅的Lambda
。 这将使您能够扩展Lambda SQS Workers
。
在SNS主题中同时订阅SQS队列和Lambda函数是让Lambda函数以低延迟处理SNS消息的好方法。 我刚才已经测试了这个过程。 每次尝试都会在插入SQS消息后调用lambda函数。 我不希望总是这样,但是它解决了延迟问题,这是我愿意衡量的。 不能保证,您将需要一个CloudWatch预定事件来接听所有丢失的消息。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.