[英]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.