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(消息消费者) 来保证数据的可靠性

关于snssqs的创建在此就不多赘言了,有需要的话可以去查阅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(&params)
    err := req.Send()
    if err == nil {
        fmt.Println(resp)
    } else {
        fmt.Print(req)
    }
}

执行后打印的结果为一串uuid

{
  MessageId: "6d1fbc97-b64f-5151-8598-e80xxxxxxxx"
}

说明消息已经成功发送了

其他文章

golang使用aws lambda发送消息到sqs

happy coding!