我使用sqs触发器遵循了标准的aws创建。然后,我向sqs队列发送消息,然后启动lambda,而lambda又将其写入stdout。一切都很好。
问题是:我还没有删除该消息的接收,我希望消息在60秒的可见性周期(默认)之后再次出现,以便进行处理。这是不可能的,奇怪的是为什么。
package main
import (
"context"
"fmt"
"github.com/aws/aws-lambda-go/events"
"github.com/aws/aws-lambda-go/lambda"
)
func handler(ctx context.Context, sqsEvent events.SQSEvent) error {
for _, message := range sqsEvent.Records {
fmt.Println("Id", message.MessageId)
fmt.Println("Source", message.EventSource)
fmt.Println("Body", message.Body)
}
return nil
}
func main() {
lambda.Start(handler)
}发布于 2018-08-27 15:54:42
在与OP的对话中做出了回答
问题:Op希望检查当事件失败时,SQS如何重试将事件发送到lambda。Op提供了用Go编写的lambda函数的代码。
Problem:只要lambda没有失败,就不会发生重试行为。
解决方案:重写lambda,因此它总是失败。
func handler(ctx context.Context, sqsEvent events.SQSEvent) error {
for _, message := range sqsEvent.Records {
fmt.Println("Id", message.MessageId)
fmt.Println("Source", message.EventSource)
fmt.Println("Body", message.Body)
}
return error.New("Song by B.S.")
}发布于 2018-08-27 17:18:27
默认情况下,如果lambda成功,它将自动从队列中删除消息。如果要将消息保留在队列中,则必须使用回调和错误或context.fail显式地失败lambda。
https://stackoverflow.com/questions/52041726
复制相似问题