簡體   English   中英

使用PHP的AWS SQS SNS協議

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM