bvdputte/kirby-queue

一个为 Kirby 3 设计的简单队列工具插件。它允许在预定的时间间隔(cron)通过处理作业队列在后台执行任务的工作者。

安装次数: 4,073

依赖: 0

建议者: 0

安全: 0

星标: 30

关注者: 3

分支: 3

开放性问题: 6

类型:kirby-plugin

1.0.4 2022-09-24 09:31 UTC

This package is auto-updated.

Last update: 2024-09-24 13:26:52 UTC


README

一个为 Kirby 3 设计的简单队列工具插件。它允许在预定的时间间隔(cron)通过处理作业队列在后台执行任务的工作者。

安装

  • master.zip 解压为文件夹 site/plugins/kirby-queue
  • git submodule add https://github.com/bvdputte/kirby-queue.git site/plugins/kirby-fingerprint
  • composer require bvdputte/kirby-queue

使用

设置工作者

1. 通过 Cron

将工作者文件 site/plugins/kirby-queue/worker.php 添加到 cron 或类似任务计划器,以所需的间隔运行(例如,每分钟)。

💡 这是设置 kirby-queue 的首选方法。

2. 路由

还有一个可在 kqueueworker-supersecreturlkey 的路由,可以触发工作队列。URL 可以通过 选项 调整。

3. 贫穷人的 cron

当您的服务器上没有安装 cron 时,您也可以通过启用 option("bvdputte.kirbyqueue.poormanscron", true); 来模拟 cron。

默认的 poor man's cron 间隔为 60 秒。您可以使用 option("bvdputte.kirbyqueue.poormanscron.interval", 60*60); 将此更改为每小时,例如。

自定义工作者

如果您需要自己的工作者逻辑(例如,需要在不同间隔运行的工作者),您可以创建自定义工作者,通过扩展 Queueworker 类。

定义队列

队列在配置文件中定义。将它们作为关联数组传递:[name] => function handler($job) {}。处理程序是一个闭包,由工作者调用以处理作业。

'bvdputte.kirbyqueue.queues' => [
    'queuename' => function($job) {

        // Get your data
        $foo = $job->get('foo');
        $bar = $job->get('bar');
    
        // Do something with your data, for example: send something to kirbylog
        try {
            kirbylog("test")->log($foo . " " . $bar);
        } catch (Exception $e) {
            // Throw an error to fail a job
            throw new Exception($e->getMessage());
            // or just return false, but setting a message for the user is better.
        }
    
        // No need to return or display anything else!
    }
],
  • 💡 您可以定义所需数量的队列,但每个队列只有一个处理程序。
  • 💡 队列将按照在 queues 选项中定义的顺序执行。

添加作业

$myQueue = kqQueue("queuename"); // "queuename must be the same as set in the options
$myJob = kqJob([ // Pass the variables needed in the handler
    'foo' => "foo",
    'bar' => "bar"
]);
$myQueue->addJob($myJob);

安排作业

$tomorrow = new DateTime('tomorrow');
$myJob->setDueDate($tomorrow->getTimestamp());

您还可以为您的作业定义一个“到期日期”(UNIX 时间戳)。您的作业将在此日期之前被忽略。

💡 请考虑您为触发工作者定义的间隔,因为到期日期仅在工作者正在处理队列时进行检查。

选项和有偏见默认值

option("bvdputte.kirbyqueue.roots");

队列的默认文件夹名称为 queues。它将放在 /site/ 文件夹中。每个队列都将得到一个以其名称为文件夹名的子文件夹。

option("bvdputte.kirbyqueue.worker.route");

触发内置工作者的路由的 URL。如果您想通过 URL 触发工作者,这可能很有用。请确保添加一个秘密散列,以免被用作攻击向量。

免责声明

本插件“按原样”提供,不提供任何保证。自行承担使用风险,并在将其用于生产环境之前始终自行测试。如果您发现任何问题,请 创建新问题

许可

MIT

不建议在任何宣传种族主义、性别歧视、恐同、动物虐待、暴力或其他任何形式仇恨言论的项目中使用此插件。