登录
首页 >  Golang >  Go问答

AWS SQS Lambda:消息不被消费

来源:stackoverflow

时间:2024-03-07 20:51:33 376浏览 收藏

哈喽!今天心血来潮给大家带来了《AWS SQS Lambda:消息不被消费》,想必大家应该对Golang都不陌生吧,那么阅读本文就都不会很困难,以下内容主要涉及到,若是你正在学习Golang,千万别错过这篇文章~希望能帮助到你!

问题内容

我遵循使用 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)
}

解决方案


从与 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 失败

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>