【发布时间】:2018-11-06 13:23:56
【问题描述】:
我在亚马逊上有一个 sqs 队列,有几个消费者轮询它。
最近我发现numberofEmptyReceives 有1000 万,这意味着我正在接受这些请求。
以下是我消费消息的方式
while True:
for message in queue.receive_messages(AttributeNames=['All'], MaxNumberOfMessages=10):
我知道有 WaitTimeSeconds 选项,但文档似乎表明它不进行长轮询
调用在返回前等待消息到达队列的持续时间(以秒为单位)。 如果消息可用,则调用会比 WaitTimeSeconds 更快返回。 如果没有消息可用且等待时间已过,则调用成功返回并返回一个空消息列表。
具体
如果消息可用,调用会比 WaitTimeSeconds 更快返回。
从上面的句子看来,boto3 仍然调用sqs 来检查是否有消息。
使用 boto3 进行长轮询以避免收取请求费用的正确方法是什么?
设置thread.sleep这么简单吗?
我在github也找不到源代码
【问题讨论】:
-
这个问题没有简单的解决方案。如果您有大量单独的批处理消息超时,则使用 SQS 为每条消息触发 lambda 可能会过大。增加轮询时间可能意味着服务响应缓慢。您需要提出自己的理由。
标签: amazon-web-services boto boto3 amazon-sqs