Amazon SQS支持两种可用消息的轮询模式:短轮询和长轮询。使用长轮询,消费者指定等待可用消息的超时时间1-20秒。
根据文档:
默认情况下,Amazon SQS使用短轮询,仅查询其服务器的子集(基于加权随机分布)以确定是否有任何可用消息作出响应。
长轮询提供以下优点:
- 允许Amazon SQS等待队列中有消息可用后再发送响应,从而消除空响应。除非连接超时,否则对于
ReceiveMessage
请求的响应至少包含一个可用消息,最多包含ReceiveMessage
操作中指定的最大数量的消息。- 通过查询所有Amazon SQS服务器而不是部分服务器,消除虚假的空响应。
- 一旦消息变为可用状态,立即返回该消息。
上述特性使得长轮询看起来非常好。那么是否存在短轮询更可取的用例呢?
特别是对于高吞吐量队列,短轮询是否比长轮询更快?