在空SQS队列上调用receive_message()时会发生什么?

时间:2017-06-30 19:41:19

标签: amazon-web-services amazon-sqs

我正在尝试计算PHP进程在空的AWS SQS队列上调用receive_message()的次数。现在我通过每次MessageID未设置队列为空时计数它。有更直接的检查方法吗?

http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/sqs-queue-message-identifiers.html

if(!isset($sqsMessage->body->ReceiveMessageResult->Message->MessageId)) {
    //Log empty call here
}

1 个答案:

答案 0 :(得分:0)

如果您真的想知道在空的AWS SQS队列上调用receive_message()的次数,则必须使用长轮询。因为即使SQS队列中有消息,短轮询也有可能返回空列表。原因是,在短轮询中,AWS仅轮询服务器的一个子集,即使队列中存在消息但驻留在未在轮询期间轮询的服务器,也可能空出来。

有关长期和短期投票的详细信息click here

您可以检查返回的列表大小为零,以查找是否在空的AWS SQS上调用了receive_message()