[英]AWS SQS SNS protocol using PHP
下面的代碼允許我發送帶有(隊列) SQS
SNS
,但我似乎無法像在Amazon Management Console中那樣選擇協議
*鍵都是隨機字符串
<?php
require_once('sdk-1.5.6.2/sdk.class.php');
$AWS_KEY = "6VVWTU4JDAAKHYB1C3ZN";
$AWS_SECRET_KEY = "GMSCUD8C0QA1QLV9Y3RP2IAKDIZSCHRGKEJSXZ4F";
//create a new SQS queue and grab the queue URL
$sqs = new AmazonSQS(array( "key" => $AWS_KEY, "secret" => $AWS_SECRET_KEY ));
$response = $sqs->create_queue('test-topic-queue');
$queue_url = (string) $response->body->CreateQueueResult->QueueUrl;
$queue_arn = 'arn:aws:sqs:us-east-1:ENCQ8gqrAcXv:test-topic-queue';
//create a new SNS topic and grab the topic ARN.
$sns = new AmazonSNS(array( "key" => $AWS_KEY, "secret" => $AWS_SECRET_KEY ));
$response = $sns->create_topic('test-topic');
$topic_arn = (string) $response->body->CreateTopicResult->TopicArn;
//Then give the SNS topic the permission to send messages to the SQS queue. ** allow all principals. SNS doesn't send from your account ID -- it has its own account ID that it sends from.
$queue_url = 'https://sqs.us-east-1.amazonaws.com/ENCQ8gqrAcXv/test-topic-queue';
$queue_arn = 'arn:aws:sqs:us-east-1:ENCQ8gqrAcXv:test-topic-queue';
$topic_arn = 'arn:aws:sns:us-east-1:ENCQ8gqrAcXv:test-topic';
$policy = new CFPolicy($sqs, array(
'Version' => '2008-10-17',
'Id' => 'sampleId',
'Statement' => array(
array(
'Resource' => $queue_arn,
'Effect' => 'Allow',
'Sid' => 'rule1',
'Action' => 'sqs:*',
'Condition' => array(
'StringEquals' => array(
'aws:SourceArn' => $topic_arn
)
),
'Principal' => array(
'AWS' => '*'
)
)
)
));
$response = $sqs->set_queue_attributes($queue_url, array(
array('Name' => 'Policy', 'Value' => $policy->get_json())
));
//then subscribe the SQS queue to the SNS topic and grab the subscription ARN.
$queue_arn = 'arn:aws:sqs:us-east-1:ENCQ8gqrAcXv:test-topic-queue';
$topic_arn = 'arn:aws:sns:us-east-1:ENCQ8gqrAcXv:test-topic';
$response = $sns->subscribe($topic_arn, 'sqs', $queue_arn);
// normally here is where you would choose the protocol but this example sends this to SQS
// subscribe ( $topic_arn, $protocol, $endpoint, $opt )
$subscription_arn = (string) $response->body->SubscribeResult->SubscriptionArn;
//view the list of subscriptions to verify.
$topic_arn = 'arn:aws:sns:us-east-1:ENCQ8gqrAcXv:test-topic';
$q = new CFBatchRequest(200);
for ($i = 0; $i < 1000; $i++)
{
$sns->batch($q)->publish($topic_arn, 'Hello world! ' . time());
}
$response = $sns->batch($q)->send();
//receive messages from the queue.
$queue_url = 'https://sqs.us-east-1.amazonaws.com/ENCQ8gqrAcXv/test-topic-queue';
$response = $sqs->receive_message($queue_url, array(
'MaxNumberOfMessages' => 10,
));
print_r($response);
// delete SQS queue
$queue_url = 'https://sqs.us-east-1.amazonaws.com/ENCQ8gqrAcXv/test-topic-queue';
$response = $sqs->delete_queue($queue_url);
?>
問題:我在哪里選擇協議?
該鏈接表示在其中定義了protocol
subscribe()
,但以上示例將其發送到SQS
您可以使用SNS推送到SMS號碼,也可以使用SNS推送到SQS隊列。 但是SQS無法發送任何內容 ,包括發送到SMS號碼。
也許您對基礎架構組件感到困惑?
訂閱方法具有以下簽名
subscribe ( $topic_arn, $protocol, $endpoint, $opt )
如果您要使用SMS作為協議進行訂閱,請執行以下操作
$response = $sns->subscribe($topic_arn, 'sms', $phone_no);
其中$phone_no(String)
是啟用了短信的設備的電話號碼
當前必須支持的不同協議是http,https,email,email-json,sms和sqs,這取決於您必須更改傳遞給subscription方法的$endpoint
參數的協議。
查看有關訂閱方法的完整文檔
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.