maxgaurav/laravel-sns-sqs-queue

使用扩展的 Laravel SQS 驱动将 SNS 消息作为队列处理。

v1.1.0 2020-03-20 12:26 UTC

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 驱动行为。