cvo-technologies/cakephp-gearman

CakePHP 3 的 gearman 插件

2.0.1 2016-09-30 10:42 UTC

This package is not auto-updated.

Last update: 2024-09-14 17:58:57 UTC


README

Build Status Coverage Status Total Downloads License

为 CakePHP 3 提供Gearman任务卸载。

要求

为什么使用此插件?

使用此插件将耗时过程(如发送电子邮件和调整上传图像大小)卸载到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

用法

使用此插件归结为

  1. 配置您的任务(s)
  2. 在您的本地系统上启动WorkerShell
  3. 通过使用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');

如果一切顺利,您应该会看到工作进程提供有关正在处理的任务的反馈,如下所示

Worker feedback

创建您自己的任务

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. 开始使用任务

要开始使用任务

  1. 在您的应用程序代码中包含JobAwareTrait
  2. 使用$this->execute函数将作业传递给Gearman

请注意,execute()方法接受以下参数

  • $name:作业(在cakephp中为任务)的名称
  • $workload:混合类型,可以是数组、字符串、整数或其他任何类型
  • $background:布尔值,true 表示在后台运行
  • $priority:Gearman::PRIORITY_NORMAL、_LOW、_NORMAL 或 _HIGH

补丁 & 功能

在提交PR之前,请确保以下条件:

错误 & 反馈

http://github.com/cvo-technologies/cakephp-gearman/issues