edriving-limited/

dynamic-sqs

为 Laravel 添加对自定义 SQS 负载的支持

2.3.0 2024-03-27 06:54 UTC

README

此包为您标准 Laravel 作业添加了对自定义 SQS 负载的支持。

安装

首先使用 composer 安装包 composer require edriving-limited/dynamic-sqs。然后使用 php artisan vendor:publish 发布配置文件。

您还需要将您的 SQS 连接的 driver 更新为 dynamic-sqs

设置

首先,您应该创建您的作业类,与您创建标准 Laravel 作业的方式完全相同。然后,我们需要创建一个 "处理器" 类,这个类负责从您的 SQS 消息中提取负载并返回您的作业类的一个实例。

这个类应该实现 JobHandlerContract 并定义一个 handle 方法,该方法返回一个作业实例。

use App\Jobs\SendWelcomeEmail;
use eDriving\DynamicSqs\JobHandlerContract;
use Illuminate\Contracts\Queue\ShouldQueue;

class SendWelcomeEmailHandler implements JobHandlerContract
{
    public function handle(array $payload): ShouldQueue
    {
        return SendWelcomeEmail($payload['data']['userId']);    
    }
}

处理器类设置完成后,我们需要定义如何将任何给定的 SQS 消息映射到特定的处理器。为此,打开您新发布的 config/dynamic-sqs.php 配置文件。在这里,我们需要定义两个属性,discoverermap

Discoverer

这个属性应该引用一个类,该类负责接收一个给定的负载并返回 "处理器 ID"。这个 ID 是负载中的一个值,将用于确定使用哪个处理器处理此消息。已经为您设置了一个示例,它从负载中返回 "处理器" 值。您可以创建自己的类版本以适应您的消息。

[
    'discoverer' => [\eDriving\DynamicSqs\Commands\DiscovererHandler::class, 'discover'],
]

Map

最后,我们需要将处理器 ID 映射到其处理器类。您可以通过在 map 属性中填充键 => 值对来完成此操作。键是处理器 ID,映射是处理器类的类字符串。

[
    'map' => [
        'sendWelcomeEmail' => SendWelcomeEmailHandler::class 
    ]
]