bvdputte / kirby-queue
一个为 Kirby 3 设计的简单队列工具插件。它允许在预定的时间间隔(cron)通过处理作业队列在后台执行任务的工作者。
Requires
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 触发工作者,这可能很有用。请确保添加一个秘密散列,以免被用作攻击向量。
免责声明
本插件“按原样”提供,不提供任何保证。自行承担使用风险,并在将其用于生产环境之前始终自行测试。如果您发现任何问题,请 创建新问题。
许可
不建议在任何宣传种族主义、性别歧视、恐同、动物虐待、暴力或其他任何形式仇恨言论的项目中使用此插件。