aloware/tenants-queue

Laravel 包,用于在多个租户之间公平地消耗作业。

v1.0.2 2024-02-01 20:59 UTC

README

Laravel 包,用于在多个租户之间公平地消耗作业。

安装

composer require aloware/tenants-queue

用法

该包使用 Redis 作为数据存储。默认情况下,它使用 default Redis 连接。您可以在 tenants-queue 配置文件中配置使用其他连接,或者在环境文件中设置。

TENANTS_QUEUE_REDIS_DB="default"
TENANTS_QUEUE_KEY_PREFIX="tenants-queue"

现在,您需要在需要公平消耗功能的作业类中将 use Dispatchable; 替换为 use TenantDispatchable;

<?php

namespace App\Jobs;

use Aloware\TenantsQueue\TenantDispatchable;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;

class ExampleJob implements ShouldQueue
{
    use TenantDispatchable, InteractsWithQueue, Queueable, SerializesModels;
...

您可以在调度时使用 ->tenant() 来分区您的数据,并让您的队列作业在这些分区之间公平地消耗。

ExampleJob::dispatch()
    ->onConnection($connection)
    ->onQueue($queue)
    ->tenant();

重试

了解此包的机制非常重要。您可能已经了解到,发送到队列的 FairSignalJob 与原始作业不同,它并不知道消费者接收到信号后将要处理的作业的确切信息。

在失败/重试的情况下,没有保证相同的作业将使用相同的信号进行处理。

因此,您在 queue:work 命令中配置的重试次数是无效的。建议将最大尝试次数(例如,10)设置为尽可能大的数字,并使用公平队列的 ->tries() 链式调用设置尝试次数。

ExampleJob::dispatch()
    ->onConnection($connection)
    ->onQueue($queue)
    ->tenant()
    ->tries(3);

许可

MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件