aws sqs lambda:消息没有重新出现
aws sqs lambda: messages not re-appearing
我遵循标准的 aws lambda 创建和 sqs 触发器。
然后我将消息发送到 sqs 队列,然后启动 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)
}
从与 OP 的对话中得出答案
问题:Op想检查事件失败时SQS如何重试发送事件到lambda。 Op 提供了用 Go 编写的 lambda 函数的代码
问题:前提是 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.")
}
默认情况下,如果您的 lambda 成功,它将自动从队列中删除消息。如果要将消息保留在队列中,则必须使用回调和错误或 context.fail
显式使 lambda 失败
我遵循标准的 aws lambda 创建和 sqs 触发器。 然后我将消息发送到 sqs 队列,然后启动 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)
}
从与 OP 的对话中得出答案
问题:Op想检查事件失败时SQS如何重试发送事件到lambda。 Op 提供了用 Go 编写的 lambda 函数的代码
问题:前提是 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.")
}
默认情况下,如果您的 lambda 成功,它将自动从队列中删除消息。如果要将消息保留在队列中,则必须使用回调和错误或 context.fail
显式使 lambda 失败