首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SQS短轮询比长轮询更好吗?

SQS短轮询比长轮询更好吗?
EN

Stack Overflow用户
提问于 2018-07-23 09:50:43
回答 1查看 23.1K关注 0票数 35

Amazon支持对可用消息的两种轮询模式:短轮询和长轮询。对于长轮询,使用者指定等待可用消息的超时时间为1-20秒。

根据文档

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

  • 通过允许Amazon在发送响应之前等待队列中的消息可用,消除空响应。除非连接超时,否则对ReceiveMessage请求的响应至少包含一条可用消息,以ReceiveMessage操作中指定的最大消息数为限。
  • 通过查询所有(而不是)Amazon服务器的子集来消除错误的空响应。
  • 消息一旦可用就立即返回。

上述特性使得长时间轮询看起来相当不错。那么,是否有这样一种情况,即短时间轮询更可取?

特别是对于高吞吐量队列,短轮询比长轮询快吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-07-23 11:01:04

长投票几乎总是比短投票更可取。以下是两种可能需要短轮询的用例(在SQS常见问题中给出):

  • 当需要立即进行消息处理时。
  • 在单个线程中轮询多个队列时。

来自SQS 常见问题

几乎在所有情况下,Amazon长轮询都比短轮询更好,长轮询请求允许队列使用者在到达队列时立即接收消息,同时减少返回的空ReceiveMessageResponse实例的数量。 在大多数用例中,Amazon长轮询以降低成本的方式提高了性能。但是,如果您的应用程序期望ReceiveMessage调用立即响应,您可能无法利用长轮询而不对应用程序进行一些修改。 例如,如果应用程序使用单个线程轮询多个队列,则从短轮询切换到长轮询可能不起作用,因为单个线程将等待任何空队列上的长轮询超时,从而延迟对任何可能包含消息的队列的处理。 在这样的应用程序中,使用单个线程只处理一个队列是一种很好的做法,允许应用程序利用Amazon长轮询提供的好处。

票数 46
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51475944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档