0100dev / cakephp-rabbitmq
CakePHP 3 的 RabbitMQ 插件
Requires
- php: >=5.5.9
- cakephp/cakephp: ~3.2
- php-amqplib/php-amqplib: 2.6.*
Requires (Dev)
- cakephp/cakephp-codesniffer: 2.*
- cakephp/debug_kit: ~3.2
- phpunit/phpunit: 4.1.*
This package is auto-updated.
Last update: 2024-09-15 04:47:24 UTC
README
RabbitMQ 插件用于 CakePHP 3。
要求
- PHP 5.5.9+
- CakePHP 3.2+
- RabbitMQ 消息代理
为什么使用这个插件?
使用此插件,通过将耗时的进程(如发送电子邮件和调整上传的图片大小)卸载到使用 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
用法
使用此插件归结为
- 配置您的任务
- 在本地系统上启动
WorkerShell
- 通过在
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');
如果一切顺利,您应该会看到工作器提供以下任务正在处理的反馈
创建您自己的任务
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 Code Sniffer 测试通过
- 代码覆盖率 不降低