maxgaurav / laravel-sns-sqs-queue
使用扩展的 Laravel SQS 驱动将 SNS 消息作为队列处理。
v1.1.0
2020-03-20 12:26 UTC
Requires
- php: ^7.2
- ext-json: *
- aws/aws-sdk-php: ^3.62
- illuminate/queue: 6.* || 7.*
This package is auto-updated.
Last update: 2024-09-24 14:09:33 UTC
README
此包允许您将 SQS 订阅的各个主题上发布的 SNS 消息作为作业处理。
队列还会处理通过 Laravel 推送的标准作业。
此包非常适合部署到微服务应用的场景。
需求
- PHP >= 7.2
- Laravel 6
- Laravel 的 SQS 驱动
- AWS 的 SQS
- AWS 的 SNS
安装
使用 composer 安装
composer require maxgaurav/laravel-sns-sqs-queue
包将自动注册其服务提供者。
配置
在 queue.php 中添加以下驱动设置
return [ //... 'sqs' => [ 'driver' => 'sqs', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), 'queue' => env('SQS_QUEUE', 'your-queue-name'), 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), ], 'sns-sqs' => [ 'driver' => 'sns-sqs', 'key' => env('AWS_ACCESS_KEY_ID'), 'secret' => env('AWS_SECRET_ACCESS_KEY'), 'prefix' => env('SQS_PREFIX', 'https://sqs.us-east-1.amazonaws.com/your-account-id'), 'queue' => env('SQS_QUEUE', 'your-queue-name'), 'region' => env('AWS_DEFAULT_REGION', 'us-east-1'), 'sns-config' => [ 'topics' => [ 'topicName' => \App\Jobs\YourJob::class, 'topic2Name' => \App\Jobs\YourOtherJob::class //... ], 'default-job' => '', // if you want to override the default job executed for non matching topics 'prefix' => env('SNS_PREFIX', 'arn:aws:sns:us-east-2:123345666:'), // SNS Topic Prefix (must include the last colon) ], ],
先决条件
- 首先在 AWS 中设置您的 SQS 队列
- SQS 必须订阅您想要通过作业处理的 SNS 的所有主题。
用法
创建的每个作业必须有两个构造函数输入。第一个输入是作业执行的主题名称,第二个是消息中发送的 json 解码数据数组。
class SampleJob { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; /** * @var string */ public $topic; /** * @var array */ public $body; /** * Create a new job instance. * * @return void */ public function __construct($topic, $body) { $this->topic = $topic; $this->body = $body; } /** * Execute the job. * * @return void */ public function handle() { // do your handling } }
默认作业
对于配置中未映射的主题,该包使用默认作业实例 \MaxGaurav\LaravelSnsSqsQueue\DefaultJob。该作业具有默认功能,对于此类主题失败。这样做是为了让应用程序知道主题未映射。
可以使用键 default-job 使用自定义默认作业处理程序替换 DefaultJob 类。传递您的类实例,它将替换使用。
常规作业
该包还可以用于将常规作业推送到 SQS 队列,就像使用 sqs 驱动一样。队列会检查作业是否为 SNS 作业,然后将其映射到主题名称,否则会回退到默认 SQS 驱动行为。