简体   繁体   English

使用AWS Go SDK将消息发布到SNS

[英]Publish message to SNS with AWS Go SDK

I'm having issue with sending a message to SNS with the AWS Go SDK. 使用AWS Go SDK向SNS发送消息时遇到问题。 Documentation for the Publish function is a little bit obscure. 发布功能的文档有些晦涩。

My piece of code is: 我的代码是:

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)
}

When I launch this code I receive the following message : 启动此代码时,我收到以下消息:

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

Maybe someone can help me with that ? 也许有人可以帮我吗?

Thanks 谢谢

I've found a solution to my issue. 我已经找到解决问题的方法。

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)
}

Some encoding inception was needed 需要一些编码开始

You have to add a "default" field to your json payload for subscribers that can't consume your message payload. 对于无法使用消息有效负载的订阅者,您必须在json有效负载中添加“默认”字段。 Take a look at this (towards the bottom): https://docs.aws.amazon.com/sns/latest/dg/mobile-push-send-custommessage.html 看一下(朝底部): https : //docs.aws.amazon.com/sns/latest/dg/mobile-push-send-custommessage.html

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM