启用 Amazon SQS 中的长轮询AmazonSDK for PHP 版本 3 - Amazon适用于 PHP 的开发工具包
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

启用 Amazon SQS 中的长轮询AmazonSDK for PHP 版本 3

在发送响应之前,长轮询使 Amazon SQS 等待指定的时间,以便消息在队列中变得可用,从而减少空响应的数量。此外,长轮询通过查询所有服务器而不是执行服务器采样,消除了假的空响应。要启用长轮询,请为接收的消息指定不为零的等待时间。要了解更多信息,请参阅 SQS 长轮询

以下示例演示如何:

所有示例代码示例AmazonSDK for PHP 版本 3(位于 GitHub 上)。.

Credentials

运行示例代码之前,请配置您的Amazon凭证,如的凭证AmazonSDK for PHP 版本 3. 然后导入AmazonSDK for PHP,如的基本使用模式AmazonSDK for PHP 版本 3.

设置队列属性以启用长轮询

导入

require 'vendor/autoload.php'; use Aws\Sqs\SqsClient; use Aws\Exception\AwsException;

示例代码

$queueUrl = "QUEUE_URL"; $client = new SqsClient([ 'profile' => 'default', 'region' => 'us-west-2', 'version' => '2012-11-05' ]); try { $result = $client->setQueueAttributes(array( '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\Sqs\SqsClient; use Aws\Exception\AwsException;

示例代码

$queueUrl = "QUEUE_URL"; $client = new SqsClient([ 'profile' => 'default', 'region' => 'us-west-2', 'version' => '2012-11-05' ]); try { $result = $client->receiveMessage(array( '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\Sqs\SqsClient; use Aws\Exception\AwsException;

示例代码

$queueName = "QUEUE_NAME"; $client = new SqsClient([ 'profile' => 'default', 'region' => 'us-west-2', 'version' => '2012-11-05' ]); try { $result = $client->createQueue(array( 'QueueName' => $queueName, 'Attributes' => array( 'ReceiveMessageWaitTimeSeconds' => 20 ), )); var_dump($result); } catch (AwsException $e) { // output error message if fails error_log($e->getMessage()); }