vanilla / garden-message-queue
Vanilla 的消息队列实现。
v1.0
2018-08-08 17:37 UTC
Requires
- php: >=7.0.0
- psr/log: ^1.0
- vanilla/garden-container: >=1.3.4
- vanilla/garden-db: ^0.1.0
- vanilla/queue-interop: dev-master
This package is auto-updated.
Last update: 2024-09-12 06:40:10 UTC
README
此组件为 Vanilla 提供了安排任务和处理的所需一切。
它提供了两个主要服务,一个 JobQueue
和一个 JobDriver
。 JobQueue
提供调度服务,而 JobDriver
提供在 Web 服务器本身上执行任务负载的实现。
如何在 Vanilla 中设置它?
- 将
vanilla/garden-message-queue
添加到 Vanilla 的composer.json
中的require
部分。 - 运行
composer update
- 通过在 Vanilla 的
bootstrap.php
中添加以下片段来启动此组件。
// Bootstrap the MessageQueue component
\Garden\MessageQueue\JobQueue::bootstrap(Gdn::getContainer());
一旦配置完成,您可以访问调度器来添加任务,如下所示
/* @var $jobQueue \Garden\MessageQueue\JobQueue */
$jobQueue = Gdn::getContainer()->get('JobQueue');
// Schedules a job
$job = $jobQueue->addJob(EchoJob::class, ['message' => 'Hello World!']);
echo "EchoJob was scheduled with ID: " . $job->getID() . " and status: " . $job->getStatus();
在 Web 请求结束时,一旦 GDN_Dispatcher
完成视图渲染,所有使用 JobQueue
安排的任务将依次处理。将调用 fastcgi_finish_request(),以便所有处理都可以在后台运行而不会挂起浏览器渲染。
如何在专用队列系统中执行任务?
您可以通过实现 JobDriverInterface
接口来提供自己的驱动程序,然后配置容器使用该自定义任务驱动程序而不是默认驱动程序。
// Switch implementation for the 'JobQueue' service
Gdn::getContainer()
->rule('JobQueue')
->setClass(ExternalJobQueue::class)
->setShared(true)
然后,该新驱动程序将负责将任务委派给外部队列系统,如 RabbitMQ。必须实现一个新的作业处理器来消费这些任务。查看 Queue Interop 存储库以了解实现将涉及的内容。