我正在尝试了解是否需要在我的工作流程中使用SQS,如果有人能够帮助解释一下。在我的应用程序中,当某个操作被执行时,它会向SNS主题提交信息,该主题会调用Lambda进行一些处理。这样做非常好。
当我在线上进行研究时,似乎人们也在这个堆栈中使用SQS,其中SNS会将信息放置在SQS上,然后SQS会调用Lambda。
我想我想要理解的是在这种情况下是否需要使用SQS。那样能够添加什么价值?换句话说,直接从SNS调用Lambda会有什么损失吗?
我正在尝试了解是否需要在我的工作流程中使用SQS,如果有人能够帮助解释一下。在我的应用程序中,当某个操作被执行时,它会向SNS主题提交信息,该主题会调用Lambda进行一些处理。这样做非常好。
当我在线上进行研究时,似乎人们也在这个堆栈中使用SQS,其中SNS会将信息放置在SQS上,然后SQS会调用Lambda。
我想我想要理解的是在这种情况下是否需要使用SQS。那样能够添加什么价值?换句话说,直接从SNS调用Lambda会有什么损失吗?
SQS不能调用Lambda函数,也无法调用其他任何东西。使用Lambda和SQS的人们会在事件计时器上运行Lambda,例如每分钟一次,并且每次函数运行时都会轮询SQS以查看是否有要处理的消息。
如果您不需要排队并防止过多Lambda函数同时运行,则不需要像SQS这样的队列系统。
除了 @Arafat Nalkhande 的回答之外,以下是 SQS 的 Lambda 的一些好处:
在 SQS 中我们可以设置一个 延迟,以便消息在一段时间后被处理,这可能在数据需要花费一些时间才能可用的情况下很有用。
SQS 可以作为一个备用存储,假设下游服务不可用,消息可以在 SQS 中保留 15 天。
这取决于您想如何处理重试和错误处理。每个AWS资源都有一种方法来重试失败的事件,因此您需要了解SNS如何处理失败的事件,它是否能够处理它或者如果不能,则使用SQS。但是,您始终可以将失败的事件从lambda推回SNS,以便再次处理它们。但还要考虑您是否真正需要SQS,即您真正需要队列服务,而不仅仅是为了重试,因为您始终可以使用其他方式来处理此类问题。