cvo-technologies / cakephp-gearman
CakePHP 3 的 gearman 插件
Requires
- php: >=5.5.9
- ext-gearman: *
- cakephp/cakephp: ~3.2
Requires (Dev)
- cakephp/cakephp-codesniffer: 2.*
- cakephp/debug_kit: ~3.2
- phpunit/phpunit: 4.1.*
This package is not auto-updated.
Last update: 2024-09-14 17:58:57 UTC
README
为 CakePHP 3 提供Gearman任务卸载。
要求
- PHP 5.5.9+
- CakePHP 3.2+
- Gearman作业服务器
- Gearman PHP 扩展
为什么使用此插件?
使用此插件将耗时过程(如发送电子邮件和调整上传图像大小)卸载到Gearman作业服务器,从而显着减少页面加载时间。
安装
使用Composer安装插件
composer require cvo-technologies/cakephp-gearman
现在可以通过运行以下shell命令加载插件
bin/cake plugin load CvoTechnologies/Gearman --bootstrap
或者手动将以下行添加到config/bootstrap.php
Plugin::load('CvoTechnologies/Gearman', ['bootstrap' => true]);
最后,向(最可能是)app.php
添加新的Gearman
配置部分
'Gearman' => [ 'Servers' => [ '127.0.0.1:4730' ], 'Jobs' => [ ] ]
可选:系统验证
在继续之前,您可能想要验证Gearman作业服务器实际上已在您的本地系统上运行。
在Ubuntu系统上运行sudo netstat -peanut | grep gearman
应产生类似以下内容
tcp 0 0 127.0.0.1:4730 0.0.0.0:* LISTEN 0 9727 625/gearmand
tcp6 0 0 ::1:4730 :::* LISTEN 0 9726 625/gearmand
用法
使用此插件归结为
- 配置您的任务(s)
- 在您的本地系统上启动
WorkerShell
- 通过使用
JobAwareTrait
中的execute()
函数从应用程序代码中卸载任务
要启动WorkerShell
以便它监听传入的任务,请在您的本地系统上运行以下命令
bin/cake worker
内置任务
电子邮件任务
此插件附带一个内置的电子邮件任务,允许您立即开始使用工作进程卸载电子邮件。
要启用电子邮件任务,首先将以下作业添加到您的Gearman配置部分
'Jobs' => [ 'className' => 'Email' ]
然后添加以下工作进程配置到您的现有电子邮件传输配置部分(最可能是位于app.php
)
'worker' => [ 'className' => 'CvoTechnologies/Gearman.Worker', 'transport' => 'default', 'background' => true ]
现在,您只需在发送电子邮件时在应用程序中使用此EmailTransporter,它将自动将所有电子邮件发送卸载到在transport
键中定义的内置任务。例如:
$email = new Email('default'); $res = $email->from(['you@example.com' => 'Your Site']) ->to('recipient@sexample.com') ->subject('Testing cakephp-gearman built-in EmailTask') ->send('Your message');
如果一切顺利,您应该会看到工作进程提供有关正在处理的任务的反馈,如下所示
创建您自己的任务
1. 创建任务
例如,我们将创建以下SleepTask
,它
- 将用作Gearman作业
- 必须在
src/Shell/Task/SleepTask.php
中创建 - 必须包含一个
main()
函数
<?php namespace CvoTechnologies\Gearman\Shell\Task; use Cake\Console\Shell; class SleepTask extends Shell { public function main($workload, GearmanJob $job) { $job->sendStatus(0, 3); sleep($workload['timeout']); $job->sendStatus(1, 3); sleep($workload['timeout']); $job->sendStatus(2, 3); sleep($workload['timeout']); return array( 'total_timeout' => $workload['timeout'] * 3 ); } }
请注意,插件将处理数组和对象。当您在任务中提交数组时,您将在工作负载中收到一个数组。
2. 开始使用任务
要开始使用任务
- 在您的应用程序代码中包含
JobAwareTrait
- 使用
$this->execute
函数将作业传递给Gearman
请注意,execute()
方法接受以下参数
$name
:作业(在cakephp中为任务)的名称$workload
:混合类型,可以是数组、字符串、整数或其他任何类型$background
:布尔值,true 表示在后台运行$priority
:Gearman::PRIORITY_NORMAL、_LOW、_NORMAL 或 _HIGH
补丁 & 功能
在提交PR之前,请确保以下条件:
- PHPUnit 和 CakePHP代码检查器 测试通过
- 代码覆盖率 不要下降