aws是亚马逊amazon提供的云服务,比如阿里云服务 ,它提供了很多网站一体化的产品,如:lambda,sns, sqs,redshift等产品
sns(amazon simple notification service)是一种高度可用、持久、安全、完全托管的发布/订阅消息收发服务,可以轻松分离微服务、分布式系统和无服务器应用程序。Amazon SNS 提供了面向高吞吐量、多对多推送式消息收发的主题。借助 Amazon SNS 主题,发布系统可以向大量订阅终端节点(包括 Amazon SQS 队列、AWS Lambda 函数和 HTTP/S Webhook 等)扇出消息,从而实现并行处理。此外,SNS 可用于使用移动推送、短信和电子邮件向最终用户扇出通知
现在打算通过lambda(消息生产者)->sns(订阅发布)->sqs(消息队列)->lambda(消息消费者) 来保证数据的可靠性
关于sns与sqs的创建在此就不多赘言了,有需要的话可以去查阅aws官方中文文档,需要注意的是sqs需要授权sns权限
在此我们使用golang来发送消息到sqs,实现代码如下
package main
import (
"fmt"
"github.com/aws/aws-sdk-go/aws"
"github.com/aws/aws-sdk-go/aws/credentials"
"github.com/aws/aws-sdk-go/aws/session"
"github.com/aws/aws-sdk-go/service/sns"
)
func main() {
// 区域
region := "cn-northwest-1"
// 消息
message := "fidding message"
// 主题
subject := "fidding"
// sns主题Arn
topicArn := "arn:aws-cn:sns:cn-northwest-1:638953167227:test"
// Initial credentials loaded from SDK's default credential chain. Such as
// the environment, shared credentials (~/.aws/credentials), or EC2 Instance
// Role. These credentials will be used to to make the STS Assume Role API.
sess := session.Must(session.NewSession())
// Create a SNS client with additional configuration
// 方式一: 使用文件证书位置默认为~/.aws/credentials
//svc := sns.New(sess, aws.NewConfig().WithRegion(region))
// 方式二: 使用传参方式
creds := credentials.NewStaticCredentials(
"YourKeyId",
"YourKeySecret",
"",
)
svc := sns.New(sess, &aws.Config{Credentials: creds, Region: aws.String(region)})
// 发送sns请求
params := sns.PublishInput{
Message: &message,
Subject: &subject,
TargetArn: &topicArn,
}
req, resp := svc.PublishRequest(¶ms)
err := req.Send()
if err == nil {
fmt.Println(resp)
} else {
fmt.Print(req)
}
}
执行后打印的结果为一串uuid
{
MessageId: "6d1fbc97-b64f-5151-8598-e80xxxxxxxx"
}
说明消息已经成功发送了