coverzen/configurable-sqs

利用laravel queue:work命令监听Amazon SQS消息的包,支持可配置模式

v1.1.1 2024-09-24 13:11 UTC

This package is auto-updated.

Last update: 2024-09-24 13:12:03 UTC


README

Build Status Latest Stable Version License

此包提供了一个简单的订阅AWS SQS队列的方法。该包设计得尽可能简单易用,只需要简单的配置即可将任何消息重定向到特定的监听器。

安装

composer require coverzen/configurable-sqs

配置

首先,您需要将以下环境变量添加到您的.env文件中

AWS_ACCESS_KEY_ID=your-key
AWS_SECRET_ACCESS_KEY=your-secret
AWS_DEFAULT_REGION=your-region
AWS_ACCOUNT_ID=your-account-id

然后,您需要将以下配置添加到您的config/queue.php文件中

'connections' => [

    ...
    
    'configurable-sqs' => [
        'driver' => 'configurable-sqs',
        'key' => env('AWS_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
        'prefix' => 'https://sqs.'.env('AWS_DEFAULT_REGION').'.amazonaws.com/'.env('AWS_ACCOUNT_ID').'/',
        'queue' => 'your-queue-name',
        'suffix' => '',
        'region' => env('AWS_DEFAULT_REGION'),
        'has_consumer' => true,
    ],
]

使用方法

要将自定义监听器订阅到队列,您需要创建一个新的监听器类并在configurable-sqs.php文件中进行配置。

    'your-queue-name' => [
        [
            'type' => ConfigurableJob::TYPE_SQS_SIMPLE_PAYLOAD,
            'search' => [
                'key' => 'message',
                'value' => 'test',
            ],
            'listener' => YourListener::class,
        ],
        [
            'type' => ConfigurableJob::TYPE_SQS_REGEX_PAYLOAD,
            'search' => [
                'key' => 'message',
                'value' => '/^test$/i',
            ],
            'listener' => YourListener::class,
        ],
        [
            'type' => ConfigurableJob::TYPE_SNS_FROM,
            'arn' => 'arn:aws:sns:eu-south-1:0000000000:HelloWorld',
            'listener' => YourListener::class,
        ],
    ],

type键可以取以下值之一

  • ConfigurableJob::TYPE_SQS_SIMPLE_PAYLOAD:此类型将在SQS消息中搜索特定的键和值。
  • ConfigurableJob::TYPE_SQS_REGEX_PAYLOAD:此类型将使用正则表达式模式在SQS消息中搜索特定的键和值。
  • ConfigurableJob::TYPE_SNS_FROM:此类型将在SQS消息中搜索特定的SNS ARN。

监听器类可以实现Coverzen\ConfigurableSqs\Interfaces\ListenerInterface接口。

namespace App\Listeners;

YourListener implements ListenerInterface
{
    public function handle(array $message): void
    {
        // Your logic here
    }
}

简单的SQS消息作业

ExampleSimpleSQSJob.php

use Coverzen\ConfigurableSqs\Job\SimpleSQSJob;

class ExampleSimpleSQSJob extends SimpleSQSJob
{
    protected string $event = 'example';

    public function __construct($data)
    {
        parent::__construct($data);
    }
}

EventTrigger.php

use App\Jobs\ExampleSimpleSQSJob;

class EventTrigger
{
    public function trigger()
    {
        ExampleSimpleSQSJob::dispatch([
            'message' => 'test',
        ]);
    }
}

EventTrigger::trigger()类执行时,ExampleSimpleSQSJob将通过sqs-configurable驱动程序以简单的消息负载形式派发到队列。

{
    "event": "example",
    "data": {
        "message": "test"
    }
}

仅发送队列配置

如果您只想发送队列配置,则需要将has_consumer配置选项设置为false。

'connections' => [

    ...
    
    'configurable-sqs-send-only' => [
        'driver' => 'configurable-sqs',
        'key' => env('AWS_ACCESS_KEY_ID'),
        'secret' => env('AWS_SECRET_ACCESS_KEY'),
        'prefix' => 'https://sqs.'.env('AWS_DEFAULT_REGION').'.amazonaws.com/'.env('AWS_ACCOUNT_ID').'/',
        'queue' => 'your-queue-name',
        'suffix' => '',
        'region' => env('AWS_DEFAULT_REGION'),
        'has_consumer' => false,
    ],
]

许可证

MIT许可证(MIT)。请参阅许可证文件获取更多信息。

致谢