aloware / tenants-queue
Laravel 包,用于在多个租户之间公平地消耗作业。
v1.0.2
2024-02-01 20:59 UTC
Requires
- php: ^7.1|^8.0
- illuminate/queue: ^5.7|^6.0|^7.0|^8.0|^9.0
- illuminate/support: ^5.7|^6.0|^7.0|^8.0|^9.0
- laravel/framework: ^5.7|^6.0|^7.0|^8.0|^9.0
Requires (Dev)
- mockery/mockery: ^1.0
- phpunit/phpunit: ^7.0|^8.0|^9.0
This package is not auto-updated.
Last update: 2024-09-24 16:18:13 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)。有关更多信息,请参阅 许可文件。