slm/queue-beanstalkd

此包已被废弃,不再维护。未建议替代包。

与Beanstalkd排队系统集成的Zend Framework 2模块

v0.4.2 2015-07-30 06:32 UTC

README

Build Status Latest Stable Version Latest Unstable Version

由Jurian Sluiman和Michaël Gallego创建

要求

安装

首先,安装SlmQueue(请参阅此处说明)。然后,将以下行添加到您的composer.json文件中

"require": {
	"slm/queue-beanstalkd": "0.4.*"
}

然后,通过在您的application.config.php文件中添加SlmQueueBeanstalkd来启用模块。您还可能想配置模块:只需将slm_queue_beanstalkd.local.php.dist(您可以在SlmQueueBeanstalkd的配置文件夹中找到此文件)复制到您的config/autoload文件夹中,并覆盖您想要的内容。

文档

在阅读SlmQueueBeanstalkd文档之前,请先阅读SlmQueue文档

(别忘了首先安装Beanstalkd,并在服务器上运行守护程序)

设置连接参数

slm_queue_beanstalkd.local.php.dist文件复制到您的config/autoload文件夹中,并按照说明操作。

添加队列

SlmQueueBeanstalkd提供了一个实现SlmQueue\Queue\QueueInterface的队列接口,并提供了以下额外方法

  • release(JobInterface $job, array $options = array()): 当一个作业失败时,您可以通过释放作业再次将其添加到队列中,以便它有另一个机会被执行。
  • bury(JobInterface $job, array $options = array()): 当一个作业失败且未被手动释放时,它将自动被埋藏。
  • kick($max): 当调用此方法时,它将把最多最多$max个被埋藏的作业移动回队列中。

包含实现此接口的具体类:SlmQueueBeanstalkd\Queue\BeanstalkdQueue,并有一个工厂可用于创建队列。因此,如果您想有一个名为“email”的队列,只需在您的module.config.php文件中添加以下行

return array(
    'slm_queue' => array(
        'queue_manager' => array(
            'factories' => array(
                'email' => 'SlmQueueBeanstalkd\Factory\BeanstalkdQueueFactory'
            )
        )
    )
);

因此,可以从QueuePluginManager类中拉取此队列。

对队列的操作

推送

有效的选项是

  • priority: 优先级越低,作业从队列中弹出的速度越快(默认为1024)
  • delay: 作业变得可弹出之前要延迟的秒数(默认为0 - 无延迟 -)
  • ttr: 作业可以保留的秒数(默认为60)

示例

$queue->push($job, array(
    'priority' => 20,
    'delay'    => 23,
    'ttr'      => 50
));

弹出

有效的选项是

  • 超时:默认情况下,当我们请求一个工作(job)时,它将阻塞直到找到一个工作(可能永远都不会找到,如果新的工作永远不来)。如果您设置了超时(以秒为单位),即使没有找到工作,它也会在超时后返回。

释放

有效的选项是

  • priority: 优先级越低,作业从队列中弹出的速度越快(默认为1024)
  • delay: 作业变得可弹出之前要延迟的秒数(默认为0 - 无延迟 -)

埋藏

有效的选项是

  • 优先级:优先级越低,工作被踢出(执行)的速度越快。

如何埋藏/释放工作

Beanstalkd提供了一个很好的埋藏/踢出/释放机制,以便失败的工作有第二次执行的机会。SlmQueueBeanstalkd提供了一种简单的方式来自动埋藏/释放工作。实际上,您只需要在工作的execute方法中抛出SlmQueueBeanstalkd\Job\Exception\BuryableExceptionSlmQueueBeanstalkd\Job\Exception\ReleasableException

use SlmQueue\Job\AbstractJob;
use SlmQueueBeanstalkd\Job\Exception;

class SimpleJob extends AbstractJob
{
    public function execute()
    {
        // Bury the job, with a priority of 10
        throw new Exception\BuryableException(array('priority' => 10));

        // Release the job, with a priority of 10 and delay of 5 seconds
        throw new Exception\ReleasableException(array('priority' => 10, 'delay' => 5));
    }
}

执行工作

SlmQueueBeanstalkd提供了一个命令行工具,可以用来弹出并执行工作。您可以在您的Zend Framework 2应用的公共文件夹中键入以下命令:

php index.php queue beanstalkd <队列名> [--timeout=]

队列是必填参数,而超时是一个可选标志,指定了在返回之前调用将等待队列中的工作到达的时间长度(以秒为单位)。如果没有任何工作到来,脚本可以无限期地等待)。