我正在寻求一些有关使用 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.")
}
更改 QueueURL 的格式效果很好。
https://docs.localstack.cloud/references/configuration/#sqs
environment: - SQS_ENDPOINT_STRATEGY=path