sholokhov/bitrix-broker

v0.1 2023-10-31 17:04 UTC

This package is auto-updated.

Last update: 2023-11-01 00:46:27 UTC


README

模块用于组织在指定队列中执行任务。建议使用cron任务来执行任务。

任务处理器实现的简单示例

namespace Task\Queue\Fakes;

use Bitrix\Main\Result;

use Task\Queue\Service\Traits\Dispatchable;
use Task\Queue\Interfaces\Bus\IShouldQueue;

class FakeTask implements IShouldQueue
{
    use Dispatchable;

    protected array $arguments;

    public function __construct(...$arguments)
    {
        $this->arguments = $arguments;
    }

    public function handle(): Result
    {
        return new Result();
    }

}

每个任务处理器都必须返回一个包含结果的对象,如果数据类型不正确,任务将被移动到失败任务列表。

new \Bitrix\Main\Result

创建新任务的示例

基于实现 Task\Queue\Interfaces\Bus\IShouldQueue 接口并使用 Task\Queue\Service\Traits\Dispatchable 扩展的对象创建新任务。

use Task\Queue\Fakes\FakeTask;
FakeTask::dispatch(55, 'TestName');

通过包装器添加任务

use Task\Queue\ORM\JobsTable;
use Task\Queue\Service\QueueManager;
use Task\Queue\Service\DTO\ORM\Job;
use Task\Queue\Fakes\Tasks\FakeCustomTask;

$job = (new Job())->setTask(FakeCustomTask::class)
    ->setParameters([55, 'TestName']);

$manager = new QueueManager(new JobsTable());
$manager->push($job);

通过ORM添加

use Task\Queue\ORM\JobsTable;
use Task\Queue\Service\DTO\ORM\Job;
use Task\Queue\Fakes\Tasks\FakeCustomTask;

$job = (new Job())->setTask(FakeCustomTask::class)
    ->setParameters([55, 'TestName']);

JobsTable::append($job);

任务处理器启动机制可以采用以下调用方式

在Task中传递一个实现 Task\Queue\Interfaces\Bus\IShouldQueue 抽象类的类名

Task\Queue\Fakes\FakeTask

在Task中也可以传递一个不实现 Task\Queue\Interfaces\Bus\IShouldQueue 抽象类的类名。在这种情况下,将尝试声明类并调用 handle 函数。如果所有尝试均未成功,则任务将被发送到错误任务列表。

Task\Queue\Fakes\Tasks\FakeCustomTask

在Task中还可以传递将被调用的静态函数的调用。

Task\Queue\Fakes\Tasks\FakeCustomTask::staticHandler