aws sqs lambda: сообщения не появляются снова - PullRequest
0 голосов
/ 27 августа 2018

Я следовал стандартному созданию AWS лямбда с триггером sqs. Затем я отправил сообщение в очередь sqs, которая затем пинает лямбду, которая, в свою очередь, пишет в 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)
}

Ответы [ 2 ]

0 голосов
/ 27 августа 2018

По умолчанию, если ваша лямбда преуспеет, она автоматически удалит сообщение из очереди. Если вы хотите сохранить сообщение в очереди, вам придется явно прервать лямбду с помощью обратного вызова и ошибки или context.fail

0 голосов
/ 27 августа 2018

Создание ответа из разговора с ОП

Вопрос : Оператор хочет проверить, как SQS повторяет отправку событий в лямбду при сбое событий. Op предоставляет код для лямбда-функции, написанной на Go

Проблема : При условии, что лямбда не дает сбоя, поэтому не происходит повторных попыток.

Решение : Перепишите лямбду, чтобы она всегда выходила из строя.

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