我有一个Lambda函数,当将消息发送到SQS队列时,它将发送SNS通知。 但是我观察到Lambda一旦处理了消息并提到了here
,便会将其从队列中删除。有没有一种方法可以使lambda失败,而无需在Java中实际引发新的异常。
答案 0 :(得分:1)
从您的描述来看,您似乎应该考虑将fan-out方案用于您的用例:
“扇出”场景是将Amazon SNS消息发送到主题,然后复制并推送到多个Amazon SQS队列,HTTP终端节点或电子邮件地址。
在这种情况下,您的SNS会将消息发布到两个SQS队列。随后,每个团队都会有自己的消息,而您无需强制终止lambda即可将处理后的消息保存在一个队列中。
答案 1 :(得分:0)
默认情况下,SQS到Lambda的集成意味着que中的消息在函数开始处理后将变得不可见,并在函数完成后从que中删除。
如果函数失败(错误退出),则消息将返回到“可见”,并将由新的lambda调用再次处理。这将一直持续到您的重新驱动器策略中配置了所有内容。
无论如何,大约4天后,邮件将开始从队列中清除,SQS队列不是永久存储位置。您不能将SQS用作永久存储。
您问题的一个简短答案是,通过以非零状态退出而使调用失败-但是请注意,除非您有将其推送到DLQ中的重新驱动策略,否则将重新处理该消息。