在发送到 SNS 之前,我可以使用 Amazon SQS 作为延迟队列吗?
Can I use Amazon SQS as a delay queue before sending to SNS?
我的系统 运行 在 Amazon 自动缩放组上,一项功能允许用户向用户发送消息,我有以下用例需要解决。
- 用户之间在我的应用程序中发送了一条新消息。
- 通过电子邮件通知用户的消息被放入队列中,延迟 60 秒。此延迟允许实时聊天客户端 (faye/angularjs) 有时间查看消息并将其标记为已查看。
- 延迟消息被拾取后,检查 "read" 状态,如果客户端尚未阅读,则发送电子邮件。
最初我打算在每个应用程序服务器上使用 cronjob 轮询消息队列,但我发现使用 SNS 调用某种电子邮件发送端点(可能在 Lambda 中)会更有效。
但是我看不出有任何方法可以让 SNS 轮询 SQS,有人可以建议如何做到这一点吗?本质上,我希望 SNS 有延迟,这样我就不会在 "live" 聊天中用电子邮件提醒向某人发送垃圾邮件。
谢谢
不幸的是,这还不是开箱即用的。缺少的部分是 Amazon SNS notifications on message arrival/visibility by an Amazon SQS queue, be it via push (similar to Amazon S3 notifications, or via poll similar to Amazon Kinesis subscriptions (see The Pull/Push Event Models for more on the difference), which would both allow to directly connect an AWS Lambda function to the resp. SQS delay queue 事件的生成,参见例如:
也就是说,您可以通过几种方式解决此限制,例如:
- 按计划触发您的 Lambda 函数(例如每分钟一次),并从那里轮询您的 SQS 延迟队列
- 计划的 Lambda 函数是 eagerly awaited missing Lambda feature in turn, but it is more easily worked around, be it either by a cron job of yours, or Eric Hammond's Unreliable Town Clock (UTC) 例如
AWS Lambda 团队在最近一个月交付了 many/most 类似的功能请求,顺便说一句,因此我希望他们在一年中仍能提供 SQS 事件处理和计划的 Lambda 函数。
在 2019 年初,可以通过几种不同的方式解决此问题:
SQS as an Event Source to Lambda(最终公布于2018-06-28),
类似于OP的原始设计。
AWS Step Functions(2016-12-01 公布),使用等待步骤
延迟。
DynamoDB Streams with Lambda triggers(2017-02-17 公布),
使用项目的 TTL 过期时间来触发 Lambda 触发器。
由于 SNS 有一个 topic limit of 100,000 per account, I would recommend using Amazon SES 来发送电子邮件(62,000 个免费 emails/month 可以帮助做出实施成本决策)。
我的系统 运行 在 Amazon 自动缩放组上,一项功能允许用户向用户发送消息,我有以下用例需要解决。
- 用户之间在我的应用程序中发送了一条新消息。
- 通过电子邮件通知用户的消息被放入队列中,延迟 60 秒。此延迟允许实时聊天客户端 (faye/angularjs) 有时间查看消息并将其标记为已查看。
- 延迟消息被拾取后,检查 "read" 状态,如果客户端尚未阅读,则发送电子邮件。
最初我打算在每个应用程序服务器上使用 cronjob 轮询消息队列,但我发现使用 SNS 调用某种电子邮件发送端点(可能在 Lambda 中)会更有效。
但是我看不出有任何方法可以让 SNS 轮询 SQS,有人可以建议如何做到这一点吗?本质上,我希望 SNS 有延迟,这样我就不会在 "live" 聊天中用电子邮件提醒向某人发送垃圾邮件。
谢谢
不幸的是,这还不是开箱即用的。缺少的部分是 Amazon SNS notifications on message arrival/visibility by an Amazon SQS queue, be it via push (similar to Amazon S3 notifications, or via poll similar to Amazon Kinesis subscriptions (see The Pull/Push Event Models for more on the difference), which would both allow to directly connect an AWS Lambda function to the resp. SQS delay queue 事件的生成,参见例如:
也就是说,您可以通过几种方式解决此限制,例如:
- 按计划触发您的 Lambda 函数(例如每分钟一次),并从那里轮询您的 SQS 延迟队列
- 计划的 Lambda 函数是 eagerly awaited missing Lambda feature in turn, but it is more easily worked around, be it either by a cron job of yours, or Eric Hammond's Unreliable Town Clock (UTC) 例如
AWS Lambda 团队在最近一个月交付了 many/most 类似的功能请求,顺便说一句,因此我希望他们在一年中仍能提供 SQS 事件处理和计划的 Lambda 函数。
在 2019 年初,可以通过几种不同的方式解决此问题:
SQS as an Event Source to Lambda(最终公布于2018-06-28), 类似于OP的原始设计。
AWS Step Functions(2016-12-01 公布),使用等待步骤 延迟。
DynamoDB Streams with Lambda triggers(2017-02-17 公布), 使用项目的 TTL 过期时间来触发 Lambda 触发器。
由于 SNS 有一个 topic limit of 100,000 per account, I would recommend using Amazon SES 来发送电子邮件(62,000 个免费 emails/month 可以帮助做出实施成本决策)。