本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
启用 &Amazon SQS; 中的长轮询Amazon SDK for PHP版本 3
在发送响应之前,长轮询使 Amazon SQS 等待指定的时间,以便消息在队列中变得可用,从而减少空响应的数量。此外,长轮询通过查询所有服务器而不是执行服务器采样,消除了假的空响应。要启用长轮询,请为接收的消息指定不为零的等待时间。要了解更多信息,请参阅 SQS 长轮询。
以下示例演示如何:
-
使用设置 Amazon SQS 队列的属性,以启用长轮询。SetQueueAttributes.
-
使用 ReceiveMessage 借助长轮询检索一条或多条消息。
-
使用 CreateQueue 创建长轮询队列。
Amazon SDK for PHPGitHub 上提供了
凭证
运行示例代码之前,请配置Amazon凭证,如中所述设置 凭证. 然后导入Amazon SDK for PHP,如中所述基本用法.
设置队列属性以启用长轮询
导入
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()); }