首页 > 解决方案 > aws sqs lambda:消息没有重新出现

问题描述

我已经使用 sqs 触发器遵循标准 aws lambda 创建。然后我将消息发送到 sqs 队列,然后启动 lambda,然后将其写入标准输出。都好。

问题是:我尚未删除收到的消息,我希望消息在 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)
}

标签: amazon-web-servicesgoaws-lambdaaws-sdkamazon-sqs

解决方案


从与 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.")
    }

推荐阅读