amazon-web-services - 使用 AWS Go SDK 将消息发布到 SNS

标签 amazon-web-services go amazon-sns

我在使用 AWS Go SDK 向 SNS 发送消息时遇到问题。发布功能的文档有点晦涩。

我的一段代码是:

package main

import (
    "encoding/json"
    "github.com/aws/aws-sdk-go-v2/aws/external"
    "github.com/aws/aws-sdk-go-v2/service/sns"
    "github.com/aws/aws-sdk-go/aws"
    "log"
)

type Person struct {
    Name string `json:"name"`
} 

func main() {
    cfg, _ := external.LoadDefaultAWSConfig()
    snsClient := sns.New(cfg)

    person := Person{
        Name:"ok",
    }
    jsonStr, _ := json.Marshal(person)

    req := snsClient.PublishRequest(&sns.PublishInput{
        TopicArn: aws.String("arn:aws:sns:us-east-1:*****:ok"),
        Message: aws.String(string(jsonStr)),
        MessageStructure: aws.String("json"),
        MessageAttributes: map[string]sns.MessageAttributeValue{
            "default": {
                DataType: aws.String("String"),
                StringValue: aws.String(string(jsonStr)),
            },
        },
    })

    res, err := req.Send()
    if err != nil {
        log.Fatal(err)
    }

    log.Print(res)
}

当我启动此代码时,我收到以下消息:

2019/01/24 20:14:24 InvalidParameter: Invalid parameter: Message Structure - No default entry in JSON message body
        status code: 400, request id: 55940de1-9645-5485-96c5-592586957ce8
exit status 1

也许有人可以帮我解决这个问题?

谢谢

最佳答案

我找到了解决问题的方法。

package main

import (
    "encoding/json"
    "github.com/aws/aws-sdk-go-v2/aws/external"
    "github.com/aws/aws-sdk-go-v2/service/sns"
    "github.com/aws/aws-sdk-go-v2/aws"
    "log"
)

type Message struct {
    Default string `json:"default"`
}

type Person struct {
    Name string `json:"name"`
} 

func main() {
    cfg, _ := external.LoadDefaultAWSConfig()
    snsClient := sns.New(cfg)

    person := Person{
        Name: "Felix Kjellberg",
    }
    personStr, _ := json.Marshal(person)

    message := Message{
        Default: string(personStr),
    }
    messageBytes, _ := json.Marshal(message)
    messageStr := string(messageBytes)

    req := snsClient.PublishRequest(&sns.PublishInput{
        TopicArn: aws.String("arn:aws:sns:us-east-1:*****:ok"),
        Message: aws.String(messageStr),
        MessageStructure: aws.String("json"),
    })

    res, err := req.Send()
    if err != nil {log.Fatal(err)
    }

    log.Print(res)
}

需要一些编码开始

关于amazon-web-services - 使用 AWS Go SDK 将消息发布到 SNS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54353860/

相关文章:

amazon-web-services - Debian 7 上的 Elastic Beanstalk 命令行界面问题

java - 为什么上传到 S3 的文件的内容类型为 application/octet-stream,除非我将文件命名为 .html?

json - AWS SNS 如何在消息中添加换行符

node.js - 是否有部署架构以使用微服务模型发送 SMS 的最佳方法?

arrays - 戈朗 : multidimensional string array instead of maps

ios - 当 iOS 设置中的通知发生更改时,Amazon SNS 如何禁用/重新启用设备?

amazon-web-services - AWS Elastic Load Balancer 未将 HTTP header 转发到 EC2 实例

amazon-web-services - AWS CloudFormation 部署失败,正在使用从另一个模板导入的资源

tcp - golang TCPConn.SetWriteDeadline 似乎没有按预期工作

go - 在 Go 中使用互斥锁