pdffiller / laravel-queue-qless
Requires
- ext-json: *
- pdffiller/qless-php: ^3.13
Requires (Dev)
- illuminate/events: 5.6.*|5.7.*|^6.20
- infection/infection: ^0.12.0
- orchestra/testbench: ~3.0
- phpstan/phpstan: ^0.11.1
- phpunit/phpunit: >=5.3 <8.0 | ^8.2
- squizlabs/php_codesniffer: ^3.4
This package is auto-updated.
Last update: 2024-09-18 14:48:38 UTC
README
安装
您可以通过以下命令使用composer安装此包:
composer require pdffiller/laravel-queue-qless
该包将自动使用Laravel自动发现注册自己。
在 config/queue.php
中设置连接
'connections' => [ // ... 'qless' => [ 'driver' => 'qless', 'redis_connection' => 'qless', 'queue' => 'default', ], // ... ],
您还可以在 config/queue.php
中将Qless队列设置为默认队列
'default' => env('QUEUE_DRIVER', 'qless'),
在 config/database.php
中设置Redis连接
'redis' => [ 'client' => 'predis', // ... 'qless' => [ 'host' => env('REDIS_HOST', '127.0.0.1'), 'password' => env('REDIS_PASSWORD', null), 'port' => env('REDIS_PORT', 6379), 'database' => 0, ], // ... ],
并将Laravel Qless服务提供者添加到app.php
<?php return [ //... 'providers' => [ //... /** * Qless */ LaravelQless\LaravelQlessServiceProvider::class, ] ];
用法
一旦您完成配置,您就可以使用Laravel队列API。如果您使用过其他队列驱动程序,您无需更改其他任何内容。如果您不知道如何使用队列API,请参阅官方Laravel文档:https://laravel.net.cn/docs/queues
您还可以使用其他功能。
主题
主题可以帮助您将作业放入不同的队列。首先,您必须创建一个订阅。您可以为主题名称使用模式。符号 *
- 单词,#
- 由点 .
分隔的几个单词。示例:first.second.*
,*.second.*
,#.third
。
/** * Subscribe */ \Queue::subscribe('*.*.test', 'queue1'); \Queue::subscribe('this.*.test', 'queue2'); \Queue::subscribe('this.*.orange', 'queue3');
然后您可以将作业放入所有订阅者。
/** * Put job to few queues */ \Queue::pushToTopic('this.is.test', TestQless::class, ['test' => 'test']); // Push job to queue1 and queue2, but not to queue3
自定义处理程序
作业处理程序可以帮助您为作业创建自定义路由。
自定义处理程序示例
class CustomHandler implements JobHandler { public function perform(BaseJob $job): void { if ($job->getQueue() === 'queue_name') { // by queue (new QueueNameJob)->perform($job); return; } if ($job->getData()['option_name'] === 'value') { // by payload (new OptionNameJob)->perform($job); return; } if (in_array('tag_name', $job->getTags())) { // by tag (new TagNameJob)->perform($job); return; } // other $job->perform(); // Default } }
您必须将其添加到服务提供者中。
public function boot() { // other code $this->app->bind(JobHandler::class, CustomHandler::class); // other code }
周期性作业
有时仅仅调度一个作业是不够的,但您希望定期运行作业。特别是,您可能有一些需要每小时运行一次的批量操作,而您不在乎哪个工作进程运行它。周期性作业的指定方式与其他作业类似
/** * Recurring Job */ \Queue::recur($intervalInSeconds, $jobClass, $data, $queueName);
分片
如果您将Qless分片与数据库分片进行比较,那么它们几乎没有共同之处。Qless为所有作业获取随机的写入连接。数据读取发生在所有连接的循环中。
在 config/database.php
中设置分片Redis连接
return [ 'redis' => [ // ... 'qless' => [ /* ... */ ], 'connection2' => [ /* ... */ ], 'connection3' => [ /* ... */ ], // ... ], ];
然后在 config/queue.php
文件中的 redis_connection
键中设置碎片
return [ 'connections' => [ // ... 'qless' => [ // ... 'redis_connection' => [ 'connection2', 'connection3', ], // ... ], // ... ], ];
测试
您可以使用以下命令运行测试:
vendor/bin/phpunit
贡献
您可以通过发现错误和打开问题来为此包做出贡献。请添加您创建的拉取请求或问题的包版本。(例如:[1.2] 在推送作业时发生致命错误)
许可协议
Laravel Qless队列驱动程序是开源软件,许可证为MIT。有关更多信息,请参阅 LICENSE.txt
文件。
© 2018-2019 PDFfiller
版权所有。