0100dev/cakephp-rabbitmq

为 CakePHP 3 量身定制的 RabbitMQ 插件

安装: 32

依赖: 0

建议者: 0

安全: 0

星标: 1

关注者: 3

分支: 6

公开问题: 0

类型:cakephp-plugin

dev-master 2016-09-30 12:13 UTC

This package is auto-updated.

Last update: 2024-09-15 04:47:24 UTC


README

Build Status StyleCI Status Coverage Status Total Downloads License

RabbitMQ 插件用于 CakePHP 3。

需求

为什么使用此插件?

使用此插件可以将耗时操作(如发送电子邮件和调整上传图片大小)卸载到 RabbitMQ 的 CLI 消费者,从而显著减少页面加载时间。还可以用于与其他系统通信或记录 lintes。

安装

使用 Composer 安装插件

composer require 0100dev/cakephp-rabbitmq

现在,可以通过运行以下 shell 命令来加载插件

bin/cake plugin load DevApp/RabbitMQ --bootstrap

或者手动将以下行添加到 config/bootstrap.php

Plugin::load('DevApp/RabbitMQ', ['bootstrap' => true]);

最后,将一个新的 Gearman 配置部分添加到(可能是)app.php

    'Gearman' => [
        'Servers' => [
            '127.0.0.1:4730'
        ],
        'Jobs' => [

        ]
    ]

可选:系统验证

在继续之前,您可能想验证 Gearman Job Server 是否确实已在本地系统上运行。

在 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 consumer

内置任务

电子邮件任务

此插件包含一个内置的电子邮件任务,允许您立即使用工作器开始卸载电子邮件。

要启用电子邮件任务,首先将以下作业添加到您的 Gearman 配置部分

    'Jobs' => [
        'className' => 'Email'
    ]

然后添加以下工作器配置到现有的 EmailTransporter 配置部分(可能位于 app.php 中)

'worker' => [
    'className' => 'CvoTechnologies/Gearman.Worker',
    'transport' => 'default',
    'background' => true
]

现在,您只需在发送电子邮件时使用此 EmailTransporter 即可。它将自动将所有电子邮件发送卸载到在 transport 键中定义的 EmailTransporter 所使用的内置任务。例如:

$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/0100Dev/cakephp-rabbitmq/issues