AWS-SQS操作

生成sqs-队列

  • 需要先引入aws-sdk包
    composer install aws/aws-sdk-php
  • 使用密钥,获取实例
    public function createSqsQueue()
    {
        $key = config('aws.key');
        $secret = config('aws.secret');
        $credentials = new Credentials($key, $secret);

        $sqsClient = new SqsClient([
            'version' => 'latest',
            'region' => 'us-east-1', // 请根据您的区域更改此处
            'credentials' => $credentials
        ]);

        // 创建队列
        $queueName = 'my-queue-test';
        $result = $sqsClient->createQueue([
            'QueueName' => $queueName
        ]);
    }

队列投递任务

<?php

require 'vendor/autoload.php';

use Aws\Sqs\SqsClient;
use Aws\Exception\AwsException;

$sqsClient = new SqsClient([
    'region' => 'us-west-2',  // Change this to your AWS region
    'version' => 'latest',
    'credentials' => [
        'key' => 'YOUR_AWS_ACCESS_KEY',
        'secret' => 'YOUR_AWS_SECRET_KEY'
    ]
]);

$queueUrl = 'https://sqs.us-west-2.amazonaws.com/123456789012/your-queue-name'; // Replace with your SQS queue URL

try {
    $result = $sqsClient->sendMessage([
        'QueueUrl' => $queueUrl,
        'MessageBody' => 'This is a test message sent to SQS.',
        'MessageAttributes' => [
            'AttributeOne' => [
                'DataType' => 'String',
                'StringValue' => 'Attribute value'
            ],
            'AttributeTwo' => [
                'DataType' => 'Number',
                'StringValue' => '123'
            ]
        ]
    ]);
    echo "Message sent successfully. Message ID: " . $result->get('MessageId') . "\n";
} catch (AwsException $e) {
    echo "Error sending message to SQS: " . $e->getMessage() . "\n";
}

队列消费任务

<?php

require 'vendor/autoload.php';

use Aws\Sqs\SqsClient;
use Aws\Exception\AwsException;

// AWS SQS configuration
$sqsClient = new SqsClient([
    'region' => 'us-west-2',  // Replace with your region
    'version' => 'latest',
    'credentials' => [
        'key' => 'YOUR_AWS_ACCESS_KEY',
        'secret' => 'YOUR_AWS_SECRET_KEY'
    ]
]);

$queueUrl = 'https://sqs.us-west-2.amazonaws.com/123456789012/your-queue-name'; // Replace with your SQS queue URL

// Infinite loop to keep the script running
while (true) {
    try {
        // Receive message from SQS
        $result = $sqsClient->receiveMessage([
            'QueueUrl' => $queueUrl,
            'MaxNumberOfMessages' => 1,  // Set to 1 for single message at a time
            'WaitTimeSeconds' => 20      // Long polling for 20 seconds
        ]);

        if (!empty($result->get('Messages'))) {
            foreach ($result->get('Messages') as $message) {
                // Process the message
                echo "Processing message: " . $message['Body'] . "\n";

                // Add custom logic here to handle the message
                // ...

                // Delete message from SQS after processing
                $sqsClient->deleteMessage([
                    'QueueUrl' => $queueUrl,
                    'ReceiptHandle' => $message['ReceiptHandle']
                ]);
                echo "Message deleted from queue.\n";
            }
        } else {
            echo "No messages received. Waiting...\n";
        }

    } catch (AwsException $e) {
        echo "Error receiving or processing message: " . $e->getMessage() . "\n";
    }

    // Add a delay to avoid hitting SQS rate limits and to avoid excessive CPU usage
    sleep(1); // Adjust sleep duration as needed
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值