amazon-web-services - Amazon SNS 和 Amazon SQS 有什么区别?

标签 amazon-web-services amazon-sqs amazon-sns

什么时候我会使用 SNS 和 SQS,为什么它们总是耦合在一起?

最佳答案

SNS是一个分布式发布-订阅系统。当发布者将消息发送到 SNS 时,消息就会被推送给订阅者。

SQS是分布式排队系统。消息不会推送给接收者。接收者必须从SQS轮询或提取消息。消息不能同时被多个接收者接收。任何一个接收者都可以接收消息、处理和删除它。其他接收者稍后不会收到相同的消息。轮询本质上会在 SQS 中的消息传递中引入一些延迟,这与 SNS 不同,SNS 中的消息会立即推送给订阅者。 SNS 支持多种端点,例如电子邮件、SMS、HTTP 端点和 SQS。如果您希望未知数量和类型的订阅者接收消息,则需要 SNS。

您不必总是将 SNS 和 SQS 结合起来。除了 SQS 之外,您还可以让 SNS 将消息发送到电子邮件、SMS 或 HTTP 端点。将 SNS 与 SQS 结合起来有很多优点。您可能不希望外部服务与您的主机建立连接(防火墙可能会阻止从外部到您的主机的所有传入连接)。

您的端点可能会因为大量消息而死掉。电子邮件和短信可能不是您快速处理消息的选择。通过将 SNS 与 SQS 结合,您可以按照自己的节奏接收消息。它允许客户端离线,容忍网络和主机故障。您还可以实现有保证的交货。如果您将 SNS 配置为将消息发送到 HTTP 端点、电子邮件或 SMS,则多次发送消息失败可能会导致消息被丢弃。

SQS主要用于解耦应用程序或集成应用程序。消息可以在 SQS 中存储较短的时间(最多 14 天)。 SNS 将消息的多个副本分发给多个订阅者。例如,假设您要将应用程序生成的数据复制到多个存储系统。您可以使用 SNS 并将此数据发送给多个订阅者,每个订阅者将其收到的消息复制到不同的存储系统( S3 、主机上的硬盘、数据库等)。

关于amazon-web-services - Amazon SNS 和 Amazon SQS 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13681213/

相关文章:

node.js - SNS confirmSubscription 使用 NodeJs 和 Express

javascript - Elasticsearch npm : Passing AWS Credentials

amazon-web-services - FindInMap 内的 CloudFormation 转换

python - 如何在不复制的情况下重试 celery 任务 - SQS

amazon-web-services - 如果没有通知,是否有 AWS/Pagerduty 服务会提醒我

python - Pandas :显示整行而不截断

java - 在代码中获取 AWS Lambda 函数的别名

amazon-web-services - EC2 - 从 T2.Medium 升级到 T2.Large 时我获得了多少磁盘空间

amazon-web-services - 我在可见性超时之前收到相同的多个 Sqs 消息

aws-lambda - 如何使用 cdk 将 sqs 队列 URL 传递给 lambda