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]);

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

    '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. 配置您的任务
  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-rabbtmq/issue