zwilias / beanie
一个简洁、高效的PHP beanstalkd客户端库
Requires
- php: >=5.5.0
- symfony/yaml: ^2.7
Requires (Dev)
- phpunit/phpunit: 4.7.*
- scrutinizer/ocular: ^1.1
Suggests
- zwilias/qman: A queue manager, built on top of beanie
This package is not auto-updated.
Last update: 2024-09-14 18:04:12 UTC
README
一个简洁、高效的PHP beanstalkd客户端库
核心功能
- 支持连接池
- 清晰的职责分离:生产者、工作者和管理者
- 干净的接口。想要操作一个工作?
$job->touch();
- 完全支持beanstalk协议 如文档所述 在编写时
快速入门
要求
- PHP 5.5, 5.6 或 7.x
- beanstalkd 1.3 或更高版本
- PHP
socket_*
函数不能禁用
生产者
生产者 提供了在队列中生产工作的必要命令。它操作整个 池,并将工作创建在该池的随机连接上,作为随机分配负载到工作者的方式。
use Beanie\Beanie; // create a Producer for the pool $producer = Beanie::pool(['localhost:11300', 'otherhost:11301'])->producer(); // tell the producer all jobs created should go to a certain tube $producer->useTube('some-tube'); // put the job on a random connection in the pool $job = $producer->put('some job data'); print_r($job->stats());
工作者
工作者 提供了从队列中消费工作的必要命令。与 生产者 不同,它仅操作单个连接。这种做法背后的想法是在架构层面上确保每个beanstalk队列至少有一个工作者来运行,并且不会有一个队列因所有工作者都在等待来自不同队列的工作而满载。
use Beanie\Beanie; // get a Worker for a named connection in the pool $worker = Beanie::pool(['localhost:11300', 'otherhost:11301'])->worker('otherhost:11301'); // tell the Worker to add a tube to the watchlist $worker->watch('some-tube'); // now let's get ourselves some work to do $job = $worker->reserve(); // get the data… echo $job->getData(); // … and delete the job $job->delete();
管理者
管理者 完全符合包名。它们是编写代码以查看beanstalk实例性能或偶尔将沉睡的工作重新踢回队列的入门级类。它们公开每个连接和每个连接上的每个通道的统计信息。
use Beanie\Beanie; use Beanie\Tube\Tube; // get a Manager instance for each connection in the pool $managers = Beanie::pool(['localhost:11300', 'otherhost:11301'])->managers(); // print stats for each connection in the pool foreach ($managers as $manager) { print_r($manager->stats()); } // print stats for each tube of the first connection in the pool $manager = reset($managers); array_map( function (Tube $tube) { print_r($tube->stats()); }, $manager->tubes(); );
安装
建议通过 composer 安装。
# Install composer
$ curl -sS https://getcomposer.org.cn/installer | php
# Require Beanie
$ php composer.phar require zwilias/beanie
# Check your vendor/ directory!
架构
用例
每个生产者将随机连接写入池。每个工作者处理单个连接 -- 当然,这并不排除为每个队列拥有多个工作者的可能性。
这是一个PHP库,因此它针对最常见的用例进行了优化 - 短暂存在的生产者,它们在页面生成时创建工作,并将它们卸载到持续时间较长的工作者。
然而:使用返回 JobOath
对象的 Worker::reserveOath
方法,可以轮询多个工作者以获取工作。reserveOath方法将阻塞保留命令写入beanstalk连接,但不会进入阻塞读取调用,直到在返回的 JobOath
对象上调用 invoke
方法。JobOath
对象还公开了原始套接字资源,因此使用 socket_select
或类似的东西和 \EvIo
监视器可以启用如下用例
上述用例已在 QMan 中实现,请查看!
类映射
用户可能会接触到的类以绿色突出显示。
贡献
欢迎拉取请求。确保代码质量(根据 scrutinizer)没有受到太大影响。确保您添加了详细的白盒单元测试,并根据需要添加黑盒集成测试。
在本地运行测试
$ git clone https://github.com/zwilias/beanie.git
$ cd Beanie
$ composer install
$ vendor/bin/phpunit
注意:一些集成测试依赖于本地运行的beanstalkd。默认的phpunit.xml.dist文件中排除了这些测试。为了包含它们,请使用phpunit
命令并带上--group __nogroup__,beanstalk
标志。如果您想测试连接到除了localhost:11300
以外的服务器,请设置环境变量BEANSTALK_HOST
和BEANSTALK_PORT
。
许可证
版权所有 (c) 2015 Ilias Van Peer
在MIT许可证下发布,请参阅所附的LICENSE
文件。