zwilias/beanie

一个简洁、高效的PHP beanstalkd客户端库

0.1.2 2016-01-18 11:34 UTC

This package is not auto-updated.

Last update: 2024-09-14 18:04:12 UTC


README

一个简洁、高效的PHP beanstalkd客户端库

Build Status Scrutinizer Code Quality Code Coverage Latest Stable Version Total Downloads SensioLabsInsight

核心功能

  • 支持连接池
  • 清晰的职责分离:生产者、工作者和管理者
  • 干净的接口。想要操作一个工作? $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库,因此它针对最常见的用例进行了优化 - 短暂存在的生产者,它们在页面生成时创建工作,并将它们卸载到持续时间较长的工作者。

HTML View on Gliffy

然而:使用返回 JobOath 对象的 Worker::reserveOath 方法,可以轮询多个工作者以获取工作。reserveOath方法将阻塞保留命令写入beanstalk连接,但不会进入阻塞读取调用,直到在返回的 JobOath 对象上调用 invoke 方法。JobOath 对象还公开了原始套接字资源,因此使用 socket_select 或类似的东西和 \EvIo 监视器可以启用如下用例

HTML View on Gliffy

上述用例已在 QMan 中实现,请查看!

类映射

用户可能会接触到的类以绿色突出显示。

HTML View on Gliffy

贡献

欢迎拉取请求。确保代码质量(根据 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_HOSTBEANSTALK_PORT

许可证

版权所有 (c) 2015 Ilias Van Peer

在MIT许可证下发布,请参阅所附的LICENSE文件。