dev-master
9999999-dev https://github.com/0100Dev/cakephp-rabbitmqA RabbitMQ plugin for CakePHP 3
MIT
The Requires
- cakephp/cakephp ~3.2
- php >=5.5.9
- php-amqplib/php-amqplib 2.6.*
The Development Requires
cakephp rabbitmq consumers 0100dev producers
Wallogit.com
2017 © Pedro Peláez
A RabbitMQ plugin for CakePHP 3
RabbitMQ plugin for CakePHP 3., (*2)
Use this plugin to drastically reduce page load times by offloading time consuming processes (like sending emails and resizing uploaded images) to a CLI consumer using messages in RabbitMQ. Could also be used to communicate with other systems or, for example, log lintes., (*3)
Install the plugin using Composer:, (*4)
composer require 0100dev/cakephp-rabbitmq
Now load the plugin by either running this shell command:, (*5)
bin/cake plugin load DevApp/RabbitMQ --bootstrap
or by manually adding the following line to config/bootstrap.php:, (*6)
Plugin::load('DevApp/RabbitMQ', ['bootstrap' => true]);
Lastly, add a new Gearman configuration section to (most likely) app.php:, (*7)
'Gearman' => [
'Servers' => [
'127.0.0.1:4730'
],
'Jobs' => [
]
]
Before proceeding you might want to verify that the Gearman Job Server is actually up and running on your local system., (*8)
On Ubuntu systems running sudo netstat -peanut | grep gearman should
produce something similar to:, (*9)
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
Using this plugin comes down to:, (*10)
WorkerShell on your local systemexecute()
function found in the JobAwareTrait
To start the WorkerShell so it will listen for incoming tasks run the
following command on your local system:, (*11)
bin/cake consumer
This plugin comes with a built-in email task that allows you to start offloading emails using the worker instantly., (*12)
To enable the email task first add the following job to your Gearman configuration section:, (*13)
'Jobs' => [
'className' => 'Email'
]
Then add the following worker configuration to your existing EmailTransporter
configuration section (most likely found in app.php):, (*14)
'worker' => [
'className' => 'CvoTechnologies/Gearman.Worker',
'transport' => 'default',
'background' => true
]
Now all you need to do is use this EmailTransporter in your application
when sending emails and it will automatically offload all email sending to the
built-in task using the EmailTransporter defined in the transport key. E.g., (*15)
$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');
If things went well you should see the worker providing feedback on tasks being processed shown below:, (*16)
, (*17)
As an example we will create the following SleepTask that:, (*18)
src/Shell/Task/SleepTask.php
main() function<?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
);
}
}
Please note that the plugin will take care of arrays and objects. When you submit an array in the task, you will receive an array in the workload., (*19)
To start using the task:, (*20)
JobAwareTrait in your application code$this->execute function to pass the job to GearmanPlease note that the execute() method takes the following parameters:, (*21)
$name: name of the job (task in cakephp)$workload: mixed, can be either an array, string, int or everything else$background: boolean, true to run in background$priority: Gearman::PRIORITY_NORMAL, _LOW, _NORMAL or _HIGHBefore submitting a PR please make sure that:, (*22)
http://github.com/0100Dev/cakephp-rabbtmq/issues, (*23)
A RabbitMQ plugin for CakePHP 3
MIT
cakephp rabbitmq consumers 0100dev producers