Amazon Simple Queue Service
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

Amazon SQS 长轮询

长轮询 通过消除空响应的数量 (ReceiveMessage 请求时没有消息可用时) 并消除假的空响应 (消息可用但未包含在响应中) 来帮助降低您使用 Amazon SQS 的成本。 有关使用 AWS 管理控制台或AWS SDK for Java(以及 CreateQueueSetQueueAttributesReceiveMessage 操作)为新队列或现有队列启用长轮询的信息,请参阅配置队列的长轮询教程。有关最佳实践,请参阅 设置长轮询

长轮询具有以下好处:

  • 在发送响应之前,允许 Amazon SQS 等到队列中的消息可用为止,从而消除空响应。除非连接超时,否则对 ReceiveMessage 请求的响应将至少包含一条可用的消息,并且最多包含 ReceiveMessage 操作中指定的最大数量的消息。

  • 通过查询所有 — 服务器而不是服务器子集来消除假的空响应—Amazon SQS。

    注意

  • 在消息可用时立即返回消息。

长轮询和短轮询之间的区别

默认情况下,Amazon SQS 使用短轮询,此时仅查询服务器的一个子集(基于加权随机分布)以确定是否有任何消息可用于响应。

如果以下列两种方式之一将 ReceiveMessage 请求的 WaitTimeSeconds 参数设置为 0,则会出现短轮询:

  • ReceiveMessage 调用将 WaitTimeSeconds 设置为 0

  • ReceiveMessage 调用不会设置 WaitTimeSeconds,但队列属性 ReceiveMessageWaitTimeSeconds 将设置为 0

注意

对于 ReceiveMessage 操作的 WaitTimeSeconds 参数,设置为介于 120 之间的值优先于为队列属性 ReceiveMessageWaitTimeSeconds 设置的任何值。