rnd-cosoft/queue

集成了各种队列管理系统的 Laminas 模块

3.2.1 2024-04-04 14:25 UTC

README

Latest Stable Version

SlmQueue 是 Laminas(前身为 Zend Framework)和 Mezzio(前身为 Zend Expressive)应用程序的作业队列抽象层。它支持各种作业队列系统,使您的应用程序独立于使用的底层系统。当前支持的系统各有自己的适配器库

何时使用

作业队列有助于将客户端发送到 Laminas 应用程序的 HTTP 请求中的长或内存密集型过程卸载。这将缩短您的响应时间,使您的访客更加愉快。异步作业有许多用例,以下是一些示例

  1. 发送电子邮件
  2. 创建 PDF 文件
  3. 通过 HTTP 连接到第三方服务器

在所有情况下,您都希望尽快将响应提供给您的访客,而无需让他们等待这个过程。SlmQueue 使您能够轻松地在现有应用程序中实现作业队列系统。

安装

SlmQueue 与 Composer 一起工作。请确保您已下载 composer.phar 并在项目根目录中有一个 composer.json 文件。要安装它,请将以下行添加到您的 composer.json 文件中

"require": {
    "slm/queue": "^3.0"
}

安装包后,您需要完成以下步骤才能使用 SlmQueue

  1. 通过在您的 application.config.php 文件中添加 SlmQueue 来启用模块。
  2. slm_queue.global.php.dist(您可以在 SlmQueue 的 config 文件夹中找到此文件)复制到您的 config/autoload 文件夹中,并应用您想要的任何设置。

注意。SlmQueue 是一个框架,因此本身没有用。启用适配器以获得将作业推入队列所需的具体实现细节。安装一个可用的适配器(例如 SlmQueueDoctrineSlmQueueRabbitMqSlmQueueSqs)。

要求

代码示例

以下是一些片段,展示了 SlmQueue 在您的应用程序中的强大功能。完整文档可在 docs/ 目录中找到。

一个使用 php 的 mail() 发送电子邮件的示例作业可能如下所示

namespace MyModule\Job;

use SlmQueue\Job\AbstractJob;

class EmailJob extends AbstractJob
{
    public static function create(string $to, string $subject, string $message): self
    {
        // This will bypass the constructor, and thus load a job without
        // having to load the dependencies.
        $job = self::createEmptyJob([
            'subject' => $subject,
            'to' => $to,
            'message' => $message,
        ]);

        // Add some metadata, so we see what is going on.
        $job->setMetadata('to', $to);

        return $job;
    }

    private SomeMailService $mailService;

    public function __construct(SomeMailService $mailService)
    {
        $this->mailService = $mailService;
    }

    public function execute()
    {
        $payload = $this->getContent();

        $to      = $payload['to'];
        $subject = $payload['subject'];
        $message = $payload['message'];

        $this->mailService->send($to, $subject, $message);
    }
}

如果您想将此作业注入队列,您可以在控制器中这样做,例如

namespace MyModule\Controller;

use MyModule\Job\Email as EmailJob;
use SlmQueue\Queue\QueueInterface;
use Laminas\Mvc\Controller\AbstractActionController;

class MyController extends AbstractActionController
{
    protected $queue;

    public function __construct(QueueInterface $queue)
    {
        $this->queue = $queue;
    }

    public function fooAction()
    {
        // Do some work

        $this->queue->push(
            EmailJob::create('john@doe.com', 'Just hi', 'Hi, I want to say hi!'),
            ['delay' => 60]
        );
    }
}

现在上面的代码允许您将作业插入队列,但之后您需要启动一个工作进程来处理这些作业。

SlmQueue 集成了 laminas-cli 以用于命令行。您可以使用以下命令启动 "default" 队列的工作进程

$ vendor/bin/laminas slm-queue:start default

贡献

SlmQueue 由各种狂热的 Laminas 用户开发。代码编写得尽可能通用,适用于 Laminas 应用程序。如果您想为 SlmQueue 贡献,请在此存储库上创建一个分支并开始修改!

任何错误都可以通过 GitHub 上的 问题 报告。如果您想贡献,请注意以下指南

  1. 将项目分支到您自己的存储库
  2. 使用分支来处理您自己的部分
  3. 在SlmQueue官方仓库创建一个拉取请求
  4. 确保用适当的单元测试覆盖更改
  5. 如果您添加了新功能,请相应地制作一些文档

对于长期贡献者,将授予此仓库的推送访问权限。

该感谢谁?

Jurian SluimanMichaël Gallego 是创建此仓库的初始工作,并且长期维护它。

目前由以下人员维护: