aloware / fair-queue
Laravel 包,用于提供针对多个分区的公平作业消费。
v1.48
2023-04-14 05:53 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
- dev-master
- v1.48
- v1.47
- v1.46
- v1.45
- v1.44
- v1.43
- v1.42
- v1.41
- v1.40
- v1.39
- v1.38
- v1.37
- v1.36
- v1.35
- v1.34
- v1.33
- v1.32
- v1.31
- v1.30
- v1.29
- v1.28
- v1.27
- v1.26
- v1.25
- v1.24
- v1.23
- v1.22
- v1.21
- v1.20
- v1.19
- v1.18
- v1.17
- v1.16
- v1.15
- v1.14
- v1.13
- v1.12
- v1.11
- v1.10
- v1.9
- v1.8
- v1.7
- v1.6
- v1.5
- v1.4
- v1.3
- v1.2
- v1.1
- v1.0
- dev-add-stand-alone-authentication
This package is auto-updated.
Last update: 2024-09-14 08:40:45 UTC
README
Laravel 包,用于提供针对多个分区的公平作业消费。
安装
composer require aloware/fair-queue
资产
运行以下命令以发布资产和配置文件
php artisan fair-queue:publish
用法
此包使用 Redis 作为数据存储。默认情况下,它使用 default
Redis 连接。您可以在 fair-queue 配置文件中配置使用其他连接,或者在环境文件中设置。
FAIR_QUEUE_REDIS_DB="default"
FAIR_QUEUE_KEY_PREFIX="fair-queue"
现在,您需要将 Job 类中需要公平消费功能的 use Dispatchable;
替换为 use FairDispatchable;
。
<?php
namespace App\Jobs;
use Aloware\FairQueue\FairDispatchable;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class ExampleJob implements ShouldQueue
{
use FairDispatchable, InteractsWithQueue, Queueable, SerializesModels;
...
您可以在调度时使用 ->fairConsume()
来分区您的数据,并让您的队列作业在这些分区中公平消费。
ExampleJob::dispatch()
->onConnection($connection)
->onQueue($queue)
->fairConsume($companyId);
重试
理解此包的机制非常重要。您可能会认为已发送到队列的 FairSignalJob(而不是原始作业)并不知道在消费者接收到信号后将要处理的确切作业。
在失败/重试的情况下,没有保证相同的作业会被相同的信号选中进行处理。
因此,您在 queue:work
命令中配置的重试次数是无效的。建议将其设置为最大的数字(例如 10)作为最大重试次数,并使用公平队列的 ->tries()
链式调用设置重试次数。
ExampleJob::dispatch()
->onConnection($connection)
->onQueue($queue)
->fairConsume($companyId)
->tries(3);
监控
查看仪表板以监控队列分区、作业等。
https://your.domain/fairqueue/dashboard
许可证
MIT 许可证(MIT)。请参阅 许可证文件 获取更多信息。