slm / queue-beanstalkd
与Beanstalkd排队系统集成的Zend Framework 2模块
Requires
- php: >=5.3.3
- pda/pheanstalk: ~3.0
- slm/queue: 0.4.*
- zendframework/zend-mvc: ~2.2
- zendframework/zend-servicemanager: ~2.2
- zendframework/zend-stdlib: ~2.2
Requires (Dev)
- phpunit/phpunit: ~4.1
- squizlabs/php_codesniffer: 1.5.*
- zendframework/zendframework: ~2.2
This package is auto-updated.
Last update: 2022-02-01 14:54:38 UTC
README
由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\BuryableException
或SlmQueueBeanstalkd\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=]
队列是必填参数,而超时是一个可选标志,指定了在返回之前调用将等待队列中的工作到达的时间长度(以秒为单位)。如果没有任何工作到来,脚本可以无限期地等待)。