本範例在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。
發送訊息到SQS queue
建立sqs.GetQueueUrlInput
物件並設定QueueName
為queue的名稱,傳入sqs.Client.GetQueueUrl()
取得GetQueueUrlOutput.QueueUrl
。
建立發送訊息物件sqs.SendMessageInput
並設定訊息在MessageBody
屬性並傳入sqs.Client.SendMessage()
發送訊息到SQS queue並返回sqs.SendMessageOutput
,取得MessageId
為Message ID。
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)
}
msg := "hello world from go"
smInput := &sqs.SendMessageInput{
DelaySeconds: 0,
MessageBody: &msg,
QueueUrl: urlOutput.QueueUrl,
}
smOutput, err := client.SendMessage(ctx, smInput)
if err != nil {
panic(err)
}
fmt.Println(*smOutput.MessageId)
}
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。
1499a6b9-1b34-4279-8bd5-b567ca13729d
在AWS console SQS queue點選[Poll for message]可看到送來的訊息。
沒有留言:
張貼留言