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]);
最后,将一个新的 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
用法
使用此插件归结为
- 配置您的任务(s)
- 在本地系统上启动
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 代码规范检查器 测试通过
- 代码覆盖率 未降低