【发布时间】:2017-07-18 16:35:21
【问题描述】:
AWS SQS 是否可以调用我的 REST API?基本上,只要将消息推送到 AWS SQS,我就想听到它并执行所需的操作。我可以安排一个可以每秒提取消息的侦听器,但这不是优化的解决方案,而且队列可能是空的(有时)。
提前致谢!!
【问题讨论】:
标签: java amazon-web-services aws-lambda aws-sdk amazon-sqs
AWS SQS 是否可以调用我的 REST API?基本上,只要将消息推送到 AWS SQS,我就想听到它并执行所需的操作。我可以安排一个可以每秒提取消息的侦听器,但这不是优化的解决方案,而且队列可能是空的(有时)。
提前致谢!!
【问题讨论】:
标签: java amazon-web-services aws-lambda aws-sdk amazon-sqs
一些想法:
使用发布者/订阅者
研究在 SNS/SQS 中使用发布者-订阅者模型,以便您将消息发布到 SNS 并通过 SQS 订阅它。如果您绝对需要在消息发布后立即处理它,您可以发布到 SNS 并在您的 SQS 订阅之外设置另一个使用者(例如调用您的 Rest API 的lambda subscriber?)来处理它。
SQS 长轮询
关于 SQS,听起来您会从长轮询中受益。来自文档:
长轮询有助于降低您使用 Amazon SQS 的成本,因为它可以减少 空响应的数量(当没有可用的消息时 返回以回复发送到 Amazon SQS 的 ReceiveMessage 请求 队列)并消除错误的空响应(当消息 在队列中可用但不包含在响应中):
- 长轮询通过允许亚马逊减少空响应的数量 SQS 在发送消息之前等待队列中的消息可用 回复。除非连接超时,否则对 ReceiveMessage 请求至少包含一个可用的 消息,最多为指定的消息的最大数量 接收消息操作。
- 长轮询通过查询所有(而不是有限数量)服务器来消除错误的空响应。
- 只要有任何消息可用,长轮询就会返回消息。
同样来自文档,要以编程方式启用长轮询,请对这些 SQS 操作中的任何一个使用以下内容:
参考:
【讨论】:
听起来您最好使用 SNS 而不是 SQS。你想让 SQS 做的事情,SNS 的设计目的是:
您可以使用 Amazon SNS 将通知消息发送到一个或多个 HTTP 或 HTTPS 端点。当您为端点订阅主题时, 您可以向主题发布通知,Amazon SNS 会发送一个 HTTP POST 请求将通知的内容传送到 订阅的端点。当您订阅端点时,您选择 Amazon SNS 是使用 HTTP 还是 HTTPS 将 POST 请求发送到 端点。如果您使用 HTTPS,那么您可以利用支持 在 Amazon SNS 中用于以下...
http://docs.aws.amazon.com/sns/latest/dg/SendMessageToHttp.html
【讨论】: