使用 Go SDK 在 LocalStack 中未返回 SQS 消息

问题描述 投票:0回答:1

我正在寻求一些有关使用 Go 在 GitLab CI 中使用 LocalStack 的帮助。它正在运行,但在测试期间我无法从 SQS 队列获取消息。我能够很好地获取队列 URL 并发送消息,但无论出于何种原因,在发送消息后我都无法获取它。此测试在本地环境中有效,但在到达 GitLab CI 运行程序时失败。

func TestSqsClient_GetMessages(t *testing.T) {
    fmt.Println("Test: TestSqsClient_GetMessages")

    setup()

    queueName := "testing-queue"

    gQInput := &sqs.GetQueueUrlInput{
        QueueName: &queueName,
    }

    fmt.Printf("Getting SQS Queue URL: %s\n", queueName)

    // Get URL of queue
    urlResult, err := client.GetQueueUrl(context.TODO(), gQInput)
    if err != nil {
        t.Error("Got an error getting the queue URL:")
        t.Error(err)
        return
    }

    queueURL := urlResult.QueueUrl

    sMInput := &sqs.SendMessageInput{
        DelaySeconds: 10,
        MessageAttributes: map[string]types.MessageAttributeValue{
            "Title": {
                DataType:    aws.String("String"),
                StringValue: aws.String("The Whistler"),
            },
            "Author": {
                DataType:    aws.String("String"),
                StringValue: aws.String("John Grisham"),
            },
            "WeeksOn": {
                DataType:    aws.String("Number"),
                StringValue: aws.String("6"),
            },
        },
        MessageBody: aws.String("Information about current NY Times fiction bestseller for week of 12/11/2016."),
        QueueUrl:    queueURL,
    }

    fmt.Printf("Sending SQS Messages: %s - %s\n", queueName, *sMInput.MessageBody)

    resp, err := client.SendMessage(context.Background(), sMInput)
    if err != nil {
        t.Error("Got an error sending the message:")
        t.Error(err)
        return
    }

    fmt.Printf("Confirmed sent SQS message: %s\n", *resp.MessageId) <--- succeeds and returns back a GUID value

    gMInput := &sqs.ReceiveMessageInput{
        MessageAttributeNames: []string{
            string(types.QueueAttributeNameAll),
        },
        QueueUrl:            queueURL,
        MaxNumberOfMessages: 1,
        VisibilityTimeout:   60,
    }

    fmt.Printf("Getting SQS Message: %s\n", queueName)

    msgResult, err := client.GetMessages(context.TODO(), gMInput)
    if err != nil {
        t.Error("Got an error receiving messages:")
        t.Error(err)
        return
    }

    fmt.Printf("Messages received: %v\n", msgResult.Messages) <-- prints `Messages received: []`

    if msgResult.Messages != nil {
        t.Log("Message ID:     " + *msgResult.Messages[0].MessageId) <--- fails because array is empty
        t.Log("Message Handle: " + *msgResult.Messages[0].ReceiptHandle)
    } else {
        t.Error("No messages found")
        return
    }

    fmt.Println("Success! Can get SQS Message.")
}
go gitlab-ci amazon-sqs gitlab-ci-runner localstack
1个回答
0
投票

更改 QueueURL 的格式效果很好。

https://docs.localstack.cloud/references/configuration/#sqs

environment:
  - SQS_ENDPOINT_STRATEGY=path
© www.soinside.com 2019 - 2024. All rights reserved.