本範例在locahost的Go應用程式以AWS的SDK aws-sdk-go-v2
從SQS queue接收訊息。
範例環境:
- Go 1.18
- github.com/aws/aws-sdk-go-v2/service/sqs v1.18.2
事前要求
參考「Golang 建立AWS SQS API client」建立SQS API client。
參考「AWS console建立SQS queue範例」建立一個名稱為DemoQueue
的SQS queue並發送一個"hello"訊息。
從SQS queue接收訊息
建立sqs.GetQueueUrlInput
物件並設定QueueName
為queue的名稱,傳入sqs.Client.GetQueueUrl()
取得GetQueueUrlOutput.QueueUrl
。
建立接收訊息物件sqs.ReceiveMessageInput
並傳入sqs.Client.ReceiveMessage()
從SQS queue接收訊息並返回sqs.ReceiveMessageOutput
並從ReceiveMessageOutput.Messages
取得多筆訊息。types.Message.MessageID
為Message ID;types.Message.Body
為訊息內容。
由於ReceiveMessageInput.WaitTimeSeconds
預設為0為short polling,所以可能接收到空訊息。
main.go
package main
import (
"context"
"fmt"
"github.com/aws/aws-sdk-go-v2/config"
"github.com/aws/aws-sdk-go-v2/service/sqs"
)
func main() {
ctx := context.TODO()
client := NewSQSClient(ctx)
qn := "DemoQueue"
urlInput := &sqs.GetQueueUrlInput{
QueueName: &qn,
}
urlOutput, err := client.GetQueueUrl(ctx, urlInput)
if err != nil {
panic(err)
}
rmInput := &sqs.ReceiveMessageInput{
QueueUrl: urlOutput.QueueUrl,
MaxNumberOfMessages: 1,
VisibilityTimeout: 5,
}
rmOutput, err := client.ReceiveMessage(ctx, rmInput)
if err != nil {
panic(err)
}
if rmOutput.Messages != nil {
fmt.Println(*rmOutput.Messages[0].MessageId)
fmt.Println(*rmOutput.Messages[0].Body)
}
}
func NewSQSClient(ctx context.Context) *sqs.Client {
cfg, err := config.LoadDefaultConfig(
ctx,
config.WithRegion("ap-northeast-1"),
)
if err != nil {
panic(err)
}
return sqs.NewFromConfig(cfg) // Create an Amazon EC2 service client
}
測試
執行Go應用程式印出接收訊息的Message ID及訊息內容如下。
aadeb265-108f-4d02-9aa3-01b3781e4607
hello
沒有留言:
張貼留言