網頁

2022/3/30

Golang 本機發送訊息到SQS queue

本範例在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
}

github


測試

執行Go應用程式印出發送訊息回傳的Message ID。

1499a6b9-1b34-4279-8bd5-b567ca13729d

在AWS console SQS queue點選[Poll for message]可看到送來的訊息。






沒有留言:

張貼留言