slm/queue

此包已被废弃,不再维护。未建议替代包。

Laminas 模块,与各种队列管理系统集成

3.3.0 2024-04-05 09:37 UTC

README

SlmQueue

重要通知

我们决定转向使用 Symfony Messenger,因此不再维护此仓库。欢迎您fork它并使其成为您自己的。

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 是一个骨架,因此本身无用。启用一个适配器以获取您将作业推送到队列所需的实现细节。安装可用的适配器之一(SlmQueueDoctrineSlmQueueRabbitMq,或 SlmQueueSqs)。

要求

代码示例

以下是一些代码片段,展示了 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 的官方仓库中创建一个 Pull Request
  4. 确保为更改编写足够的单元测试
  5. 如果您添加了新功能,请同时编写一些文档

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

要感谢谁?

Jurian SluimanMichaël Gallego 初始创建了此仓库,并且长期维护。

目前由以下人员维护: