本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
在使用 AWS SDK for PHP 版本 3 的 Amazon SQS 中启用长轮询
在发送响应之前,长轮询使 Amazon SQS 等待指定的时间,以便消息在队列中变得可用,从而减少空响应的数量。此外,长轮询通过查询所有服务器而不是执行服务器采样,消除了假的空响应。要启用长轮询,请为接收的消息指定不为零的等待时间。要了解更多信息,请参阅 SQS 长轮询。
以下示例演示如何:
-
使用,在 Amazon SQS 队列上设置属性以启用长轮询功能。SetQueueAttributes
-
使用长轮询检索一条或多条消息ReceiveMessage。
-
使用创建长轮询队列CreateQueue。
的所有示例代码都可以在此AWS SDK for PHP处找到 GitHub
凭证
运行示例代码之前,请配置您的 AWS 凭证,如 凭证 中所述。然后导入 AWS SDK for PHP,如 基本用法 中所述。
设置队列属性以启用长轮询
导入
require 'vendor/autoload.php'; use Aws\Exception\AwsException; use Aws\Sqs\SqsClient;
示例代码
$queueUrl = "QUEUE_URL"; $client = new SqsClient([ 'profile' => 'default', 'region' => 'us-west-2', 'version' => '2012-11-05' ]); try { $result = $client->setQueueAttributes([ 'Attributes' => [ 'ReceiveMessageWaitTimeSeconds' => 20 ], 'QueueUrl' => $queueUrl, // REQUIRED ]); var_dump($result); } catch (AwsException $e) { // output error message if fails error_log($e->getMessage()); }
使用长轮询检索消息
导入
require 'vendor/autoload.php'; use Aws\Exception\AwsException; use Aws\Sqs\SqsClient;
示例代码
$queueUrl = "QUEUE_URL"; $client = new SqsClient([ 'profile' => 'default', 'region' => 'us-west-2', 'version' => '2012-11-05' ]); try { $result = $client->receiveMessage([ 'AttributeNames' => ['SentTimestamp'], 'MaxNumberOfMessages' => 1, 'MessageAttributeNames' => ['All'], 'QueueUrl' => $queueUrl, // REQUIRED 'WaitTimeSeconds' => 20, ]); var_dump($result); } catch (AwsException $e) { // output error message if fails error_log($e->getMessage()); }
使用长轮询创建队列
导入
require 'vendor/autoload.php'; use Aws\Exception\AwsException; use Aws\Sqs\SqsClient;
示例代码
$queueName = "QUEUE_NAME"; $client = new SqsClient([ 'profile' => 'default', 'region' => 'us-west-2', 'version' => '2012-11-05' ]); try { $result = $client->createQueue([ 'QueueName' => $queueName, 'Attributes' => [ 'ReceiveMessageWaitTimeSeconds' => 20 ], ]); var_dump($result); } catch (AwsException $e) { // output error message if fails error_log($e->getMessage()); }