bushbaby/slmqueuedoctrine-postponablejobstrategy

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

BsbPostponableJobStrategy 是 SlmQueueDoctrine ZF2 模块的一种策略,该策略允许作业推迟执行,直到其他作业成功处理。

1.0.3 2016-04-26 09:19 UTC

This package is auto-updated.

Last update: 2021-08-23 21:33:54 UTC


README

BsbPostponableJobStrategy 是 SlmQueueDoctrine ZF2 模块的一种策略,该策略允许作业推迟执行,直到其他作业成功处理。

Latest Stable Version Total Downloads Latest Unstable Version License

Build Status Code Coverage Scrutinizer Code Quality

理由

我需要一个简单的方法来确保作业处理顺序。如果你只有一个工作者,那么这些作业将按照它们被添加到队列中的顺序执行(先进先出)。然而,当多个工作者处理多个队列时,这无法得到保证。

安装

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),在作业被处理后从数据库中删除作业。当这个生命周期立即(或非常短)时,(可能)无法获取已处理作业的状态。因此,我们假设它已成功执行,因此当前作业的执行不会被推迟。