首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >aws sqs lambda:消息未重新出现

aws sqs lambda:消息未重新出现
EN

Stack Overflow用户
提问于 2018-08-27 14:41:28
回答 2查看 1.9K关注 0票数 0

我使用sqs触发器遵循了标准的aws创建。然后,我向sqs队列发送消息,然后启动lambda,而lambda又将其写入stdout。一切都很好。

问题是:我还没有删除该消息的接收,我希望消息在60秒的可见性周期(默认)之后再次出现,以便进行处理。这是不可能的,奇怪的是为什么。

代码语言:javascript
复制
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)
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-27 15:54:42

在与OP的对话中做出了回答

问题:Op希望检查当事件失败时,SQS如何重试将事件发送到lambda。Op提供了用Go编写的lambda函数的代码。

Problem:只要lambda没有失败,就不会发生重试行为。

解决方案:重写lambda,因此它总是失败。

代码语言:javascript
复制
    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.")
    }
票数 1
EN

Stack Overflow用户

发布于 2018-08-27 17:18:27

默认情况下,如果lambda成功,它将自动从队列中删除消息。如果要将消息保留在队列中,则必须使用回调和错误或context.fail显式地失败lambda。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52041726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档