slm / queue
Laminas 模块,与各种队列管理系统集成
Requires
- php: ~7.4.0 || ~8.0.0 || ~8.1.0 || ~8.2.0 || ~8.3.0
- ext-json: *
- laminas/laminas-cli: ^1.2
- laminas/laminas-eventmanager: ^3.4
- laminas/laminas-servicemanager: ^3.11
- laminas/laminas-stdlib: ^3.7.1
Requires (Dev)
- laminas/laminas-config: ^3.7
- laminas/laminas-i18n: ^2.12
- laminas/laminas-log: ^2.15
- laminas/laminas-modulemanager: ^2.11
- laminas/laminas-mvc: ^3.3
- laminas/laminas-serializer: ^2.11
- laminas/laminas-view: ^2.13
- phpunit/phpunit: ^9.3
- squizlabs/php_codesniffer: ^3.6.2
Suggests
- rnd-cosoft/slm-queue-rabbitmq: If you are using RabbitMQ
- slm/queue-beanstalkd: If you are using Beanstalk
- slm/queue-doctrine: If you are using Doctrine ORM
- slm/queue-sqs: If you are using Amazon SQS
- 3.3.0
- 3.2.0
- 3.1.1
- 3.1.0
- 3.1-beta
- 3.0.1
- 3.0.0
- 3.0-beta.4
- 3.0-beta.3
- 3.0-beta.2
- 3.0-beta
- 2.1.0
- 2.0.1
- 2.0.0
- dev-master / 1.1.x-dev
- 1.0.4
- 1.0.3
- 1.0.2
- 1.0.1
- 1.0.0
- 0.8.0
- 0.7.0
- 0.6.0
- 0.5.1
- 0.5.0
- 0.4.2
- 0.4.1
- 0.4.0
- 0.4.0-beta3
- 0.4.0-beta2
- 0.4.0-beta1
- 0.3.0
- 0.3.0-rc1
- 0.3.0-beta3
- 0.3.0-beta2
- 0.3.0-beta1
- 0.2.5
- 0.2.4
- 0.2.3
- 0.2.2
- 0.2.1
- 0.2
- 0.1
- dev-feature/test-build
- dev-id
- dev-correct-count
- dev-feature/simplified-listeners
This package is auto-updated.
Last update: 2024-07-03 10:19:30 UTC
README
SlmQueue
重要通知
我们决定转向使用 Symfony Messenger,因此不再维护此仓库。欢迎您fork它并使其成为您自己的。
SlmQueue 是 Laminas(以前称为 Zend Framework)和 Mezzio(以前称为 Zend Expressive)应用的作业队列抽象层。它支持各种作业队列系统,并使您的应用独立于所使用的底层系统。目前支持的系统各有自己的适配器库
何时使用
作业队列有助于将客户端发送到 Laminas 应用的 HTTP 请求中的长时间或内存密集型进程卸载。这将缩短您的响应时间,使您的访客更加满意。异步作业有很多用途,以下是一些示例
- 发送电子邮件
- 创建 PDF 文件
- 通过 HTTP 连接到第三方服务器
在所有情况下,您都希望尽快向访客提供服务响应,而不让他们等待这个长时间的过程。SlmQueue 使您能够轻松地在现有应用程序中实现作业队列系统。
安装
SlmQueue 与 Composer 一起工作。请确保您已下载 composer.phar,并在您项目的根目录中有一个 composer.json
文件。要安装它,请在您的 composer.json
文件中添加以下行
"require": { "slm/queue": "^3.0" }
安装包后,您需要完成以下步骤才能使用 SlmQueue
- 通过在您的
application.config.php
文件中添加SlmQueue
来启用模块。 - 将
slm_queue.global.php.dist
(您可以在 SlmQueue 的config
文件夹中找到此文件)复制到您的config/autoload
文件夹中,并应用您想要的任何设置。
注意。SlmQueue 是一个骨架,因此本身无用。启用一个适配器以获取您将作业推送到队列所需的实现细节。安装可用的适配器之一(SlmQueueDoctrine,SlmQueueRabbitMq,或 SlmQueueSqs)。
要求
- PHP >= 7.4
- laminas-servicemanager >= 3.3.1
代码示例
以下是一些代码片段,展示了 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 上报告为一个 问题。如果您想贡献,请注意以下指南:
- 将项目克隆到您自己的仓库中
- 使用分支来处理您自己的部分
- 在 SlmQueue 的官方仓库中创建一个 Pull Request
- 确保为更改编写足够的单元测试
- 如果您添加了新功能,请同时编写一些文档
对于长期贡献者,将提供此仓库的推送访问权限。
要感谢谁?
Jurian Sluiman 和 Michaël Gallego 初始创建了此仓库,并且长期维护。
目前由以下人员维护: