在流明的 AWS SQS 中实施优先级(高、中、低)

Posted

技术标签:

【中文标题】在流明的 AWS SQS 中实施优先级(高、中、低)【英文标题】:Implement priorities (high, medium, low) in AWS SQS in Lumen 【发布时间】:2021-06-09 14:06:47 【问题描述】:

如何在 Lumen php 中传递 AWS SQS 中的优先级(高、中、低)。

"php": "^7.3|^8.0",
"aws/aws-sdk-php": "^3.158",
"laravel/lumen-framework": "^8.0"

queqe.php

<?php

return [
    'default' => env('QUEUE_CONNECTION', 'sqs'),

    'connections' => [
        'sqs' => [
            'driver' => 'sqs',
            'key' => 'key',
            'secret' => 'secret',
            'prefix' => 'https://sqs.us-east-1.amazonaws.com/1234567891452',
            'queue' => '',
            'suffix' => 'dev-test-app',
            'region' => 'us-east-1',
            'after_commit' => false,
        ]
    ],
];

EmailJob.php

<?php

namespace App\Jobs;

use Log;

class EmailJob extends Job

    public $queue;

    public function __construct($data)
    
        $this->queue = $data['queue'];
    

    public function handle()
    
        Log::info('Email job '.$this->queue.' is run at start time - '.microtime(true));
    

SmsJob.php

<?php

namespace App\Jobs;

use Log;

class SmsJob extends Job

    public $queue;

    public function __construct($data)
    
        $this->queue = $data['queue'];
    

    public function handle()
    
        Log::info('Sms job '.$this->queue.' is run at start time - '.microtime(true));
    

加入队列

Queue::push(new EmailJob(array('queue' => 'email-test')));
Queue::push(new SmsJob(array('queue' => 'sms-test')));

我如何设置电子邮件、短信工作等的优先级(高、中、低)...可能还会添加新工作。

【问题讨论】:

【参考方案1】:

SQS 是 Simple 队列服务 - 不幸的是它没有内置的优先级系统。

您必须创建多个队列。生产者将消息发送到正确的队列(高、中、低),消费者首先轮询高队列中的工作并继续工作。如果高队列为空,则轮询中队列,如果也为空,则轮询低队列。

您也可以使用 Amazon MQ,它是托管的 ActiveMQ 或 RabbitMQ,它们都很可能支持此功能。

【讨论】:

你的意思是aws中的多个sqs服务 SQS中的多个队列,每个区域只有一个SQS服务:) 我已经在 AWS SQS 中有 1 个队列 .. 所以我应该为低、中、高创建 3 个队列。如果是这样的话,我该如何使用 php artisan 命令调用 是的,您必须在 SQS 中创建三个队列。我不知道如何在 php 中做到这一点,我只是为了 SQS ;-)

以上是关于在流明的 AWS SQS 中实施优先级(高、中、低)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AWS Cloud Formation 中实施嵌套堆栈?

我们可以在不使用 GraphQL 的情况下在项目中实施 AWS-Appsync 吗?

如何在 AWS Cognito 中实施组限制访问

如何使用 CICD 在 Elastic Beanstalk 环境中实施蓝绿部署

在Python中使用aws的sns和sqs

创建 AWS SQS 队列