bushbaby / slmqueuedoctrine-postponablejobstrategy
BsbPostponableJobStrategy 是 SlmQueueDoctrine ZF2 模块的一种策略,该策略允许作业推迟执行,直到其他作业成功处理。
Requires
- php: >=5.5
- slm/queue-doctrine: ~0.4
Requires (Dev)
- phpunit/phpunit: ~4.8|~5.1
- squizlabs/php_codesniffer: ~2.0
- zendframework/zendframework: ~2.0
This package is auto-updated.
Last update: 2021-08-23 21:33:54 UTC
README
BsbPostponableJobStrategy 是 SlmQueueDoctrine ZF2 模块的一种策略,该策略允许作业推迟执行,直到其他作业成功处理。
理由
我需要一个简单的方法来确保作业处理顺序。如果你只有一个工作者,那么这些作业将按照它们被添加到队列中的顺序执行(先进先出)。然而,当多个工作者处理多个队列时,这无法得到保证。
安装
BsbPostponableJobStrategy 需要 Composer。要将它安装到你的项目中,只需在你的 composer.json 文件中添加以下行
composer.phar require "bushbaby/slmqueuedoctrine-postponablejobstrategy:~1.0"
通过在应用程序配置文件 application.config.php 中添加 BsbPostponableJobStrategy 来启用模块。
配置
启用此模块后,将向 SlmQueue 的策略管理器注册一个新的策略。然后你应该通过向适当的工作者队列添加一些配置来启用它。建议的位置是在你的自动加载配置目录中的 slm_queue.global.php。
示例:为名为 default 的队列启用 PostponableJobStrategy,释放延迟为 30 秒
'worker_strategies' => array(
'default' => array( // per worker
),
'queues' => array( // per queue
'default' => array(
'BsbPostponableJobStrategy\Strategy\PostponableJobStrategy' => array(
'release_delay' => 30
),
),
),
),
PostponableJobStrategy
PostponableJobStrategy 接受一个选项。
release_delay (int) 释放作业回队列时使用的延迟选项的秒数
用法
需要等待执行直到其他作业完成的作业必须实现 PostponableJobInterface。我建议您使用提供的 PostponableJobTrait。
class MyJob extends SlmAbstractJob implements PostponableJobInterface
{
use PostponableJobTrait;
...
}
然后在排队作业时,您需要告诉您的可推迟作业哪些作业应该先处理
$postponableJob = $jobManager->get('MyJob')->setContent(...);
$job = $jobManager->get('SomeJob')->setContent(...);
$queue->push($job);
$postponableJob->postponeUntil($job);
$queue->push($postponableJob);
已知限制
SlmQueueDoctrine 有特定的队列选项(deleted_lifetime 和 buried_lifetime),在作业被处理后从数据库中删除作业。当这个生命周期立即(或非常短)时,(可能)无法获取已处理作业的状态。因此,我们假设它已成功执行,因此当前作业的执行不会被推迟。