vanilla/garden-message-queue

Vanilla 的消息队列实现。

v1.0 2018-08-08 17:37 UTC

This package is auto-updated.

Last update: 2024-09-12 06:40:10 UTC


README

此组件为 Vanilla 提供了安排任务和处理的所需一切。

它提供了两个主要服务,一个 JobQueue 和一个 JobDriverJobQueue 提供调度服务,而 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 存储库以了解实现将涉及的内容。