0

使用 SQS 上传到 S3 是否会使进程更容错?

如果是这样,我很难使用语法,试图结合创建一个queue然后上传到 S3。
如果我的逻辑不正确,我将如何设置SQS用于上传到的系统S3

if (!class_exists('S3'))require_once('S3.php');

// *these keys are random strings
$AWS_KEY = "6VVWTU4JDAAKHYB1C3ZN";
$AWS_SECRET_KEY = "GMSCUD8C0QA1QLV9Y3RP2IAKDIZSCHRGKEJSXZ4F";

//AWS access info
if (!defined('awsAccessKey')) define('awsAccessKey', $AWS_KEY);
if (!defined('awsSecretKey')) define('awsSecretKey', $AWS_SECRET_KEY);
//instantiate the class
$s3 = new S3(awsAccessKey, awsSecretKey);

//check whether a form was submitted
if(isset($_POST['Submit'])){

    //retreive post variables
    $fileName = $_FILES['theFile']['name'];
    $fileTempName = $_FILES['theFile']['tmp_name'];

    //create a new bucket
    $s3->putBucket("mybucket", S3::ACL_PUBLIC_READ);




    //add the queue
    $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';

    //$queue_url . ?Action=SendMessage&MessageBody=Your%20Message%20Text?&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Version=2011-10-01?&Expires=2008-02-10T12:00:00Z?&Signature=lBP67vCvGlDMBQ1do?fZxg8E8SUEXAMPLE&SignatureVersion=2&SignatureMethod=HmacSHA256


    // HOW DO I INCORPORATE SQS AND S3



    //move the file
    if ($s3->putObjectFile($fileTempName, 
                                "mybucket", 
                                "myFolder/" . $fileName, S3::ACL_PUBLIC_READ, 
                                array(), 
                                $_FILES['theFile']['type']) ) {
        //it works
    }else{
        // error
    }
}
4

2 回答 2

4

我并不完全理解您要求的容错能力。但是在使用 S3 和 SQS 进行扩展方面,亚马逊 AWS 网站上有一篇优秀的论文,讨论了一起使用 SQS 和 EC2 来扩展和缩减您的基础设施,其中当然可以包括上传到 S3 和使用 SQS 等过程告诉应用程序处理某些东西。您没有提及您是否正在使用 EC2 或是否对此感兴趣。

这是文章:http ://aws.amazon.com/articles/1464

否则,听起来您的逻辑可能会被混淆,因为 SQS 不是从服务器到 S3 的中间,而是更多用于应用程序消息传递。

于 2012-06-27T02:18:33.973 回答
1

我想我弄清楚了 OP 在这个话题上的困惑。

显示的图表显示 SQS 正在处理上传,但实际上并非如此,当您上传 1 或 100 张照片时,它们会直接添加到 S3,然后使用 SQS 创建一个“任务”,其中一个 EC2“处理服务” " 将拉取,然后从 SQS 消息中命名的 S3 存储中获取实际图片。

希望这能为将来看到这个问题感到迷茫的用户提供一些见解。

于 2014-03-11T22:00:11.117 回答