在流明的 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 吗?