2017 © Pedro Peláez
 

library php-gearman

Gearman job server workers helper

image

demi/php-gearman

Gearman job server workers helper

  • Monday, January 29, 2018
  • by demi
  • Repository
  • 3 Watchers
  • 12 Stars
  • 729 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 5 Forks
  • 5 Open issues
  • 23 Versions
  • 8 % Grown

The README.md

php-gearman-job-server

Gearman job server workers helper, (*1)

Installation

  • Run:
composer require "demi/php-gearman" "~1.0"
  • Install gearman job server as PHP-extension: http://gearman.org/getting-started/#gearman_php_extension
  • Install supervisor:
apt-get install supervisor
  • (optional) Install Gearman GUI: http://gaspaio.github.io/gearmanui

Configuration

Yii1/Yii2:

supervisor.php at you common config dir:, (*2)

return [
    'configFile' => '/etc/supervisor/conf.d/workers.conf',
    'workersDirectory' => realpath(__DIR__ . '/../../'),
    'restartSleepingTime' => 5,
    'all' => [
        'crop_image' => ['numprocs' => 0, 'command' => '/usr/bin/php yii workers/crop-image'],
        'bad_worker' => ['numprocs' => 0, 'command' => '/usr/bin/php yii workers/bad-worker'],
    ],
    'sets' => [
        'general' => [
            'crop_image' => 5,
        ],
        'minimal' => [
            'crop_image' => 50,
            'bad_worker' => 50,
        ],
        'maximal' => [
            'crop_image' => 100,
            'bad_worker' => 100,
        ],
    ],
];

Gearman component configuration

Yii2

/common/config/main.php:, (*3)

'components' => [
    'gearman' => [
        'class' => '\demi\gearman\yii2\Component',
        'host' => '127.0.0.1',
        'port' => 4730,
        'supervisorConfig' => require(__DIR__ . '/supervisor.php'),
    ],
],

/console/config/main.php:, (*4)

return [
    'controllerMap' => [
        'gearman' => [
            'class' => '\demi\gearman\yii2\SupervisorController',
            'gearmanComponentName' => 'gearman', // name of component: Yii::$app->gearman (from previous config listing)
        ],
    ],
],

Yii1

/protected/config/main.php:, (*5)

'components' => [
    'gearman' => [
        'class' => '\demi\gearman\yii1\GearmanComponent',
        'host' => '127.0.0.1',
        'port' => 4730,
        'supervisorConfig' => require(__DIR__ . '/supervisor.php'),
    ],
],

/protected/config/console.php:, (*6)

$mainConfig = require(dirname(__FILE__) . '/main.php');
return [
    'commandMap' => [
        'gearman' => [
            'class' => '\demi\gearman\yii1\SupervisorCommand',
            'gearmanComponentName' => 'gearman', // name of component: Yii::app()->gearman (from previous config listing)
        ],
    ],
    'components' => [
        'gearman' => $mainConfig['components']['gearman'],
    ],
],

Laravel:

Add service provider to /config/app.php:, (*7)

'providers' => [
    // Gearman helper
    demi\gearman\laravel5\GearmanServiceProvider::class
],
'aliases' => [
    // Gearman helper
    'Gearman' => demi\gearman\laravel5\GearmanFacade::class,
],

Publish /config/gearman.php, (*8)

php artisan vendor:publish --provider="demi\gearman\laravel5\GearmanServiceProvider" --tag=config

Usage

Running workers:

Gearman workers - it is simple looped console commands, (*9)

Yii2:

Create new console controller
/console/controllers/WorkersController.php:, (*10)

<?php

namespace console\controllers;

use Yii;
use GearmanJob;

/**
 * Gearman workers
 */
class WorkersController extends \yii\console\Controller
{
    /**
     * Crop image worker
     */
    public function actionCropImage()
    {
        Yii::$app->gearman->runWorker('crop_image', function (GearmanJob $job) {
            $workload = Yii::$app->gearman->deserializeWorkload($job->workload());
            $imagePath = $workload['image_path'];
            if (empty($imagePath)) {
                return Yii::$app->gearman->serializeWorkload(['status' => 'error', 'message' => 'No image']);
            }

            // Do some job...

            return Yii::$app->gearman->serializeWorkload(['status' => 'success', 'foo' => 'bar']);
        });
    }
}
````

##### Yii1:
Create new console command<br />
/protected/commands/WorkersCommand.php:
```php
<?php

/**
 * Gearman workers
 */
class WorkersCommand extends CConsoleCommand
{
    /**
     * Crop image worker
     */
    public function actionCropImage()
    {
        Yii::app()->gearman->runWorker('crop_image', function (GearmanJob $job) {
            $workload = Yii::app()->gearman->deserializeWorkload($job->workload());
            $imagePath = $workload['image_path'];
            if (empty($imagePath)) {
                return Yii::app()->gearman->serializeWorkload(['status' => 'error', 'message' => 'No image']);
            }

            // Do some job...

            return Yii::app()->gearman->serializeWorkload(['status' => 'success', 'foo' => 'bar']);
        });
    }
}
````

##### Laravel:
Create new console command<br />
/app/Console/Commands/CropImage.php:
```php
<?php

namespace App\Console\Commands;

use Illuminate\Console\Command;
use GearmanJob;
use Gearman;

/**
 * Gearman crop image worker
 */
class CropImage extends Command
{
    /**
     * @inheritdoc
     */
    protected $name = 'worker:crop-image';

    /**
     * @inheritdoc
     */
    protected $description = 'Worker for cropping image';

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        Gearman::runWorker('crop_image', function (GearmanJob $job) {
            $workload = Gearman::deserializeWorkload($job->workload());
            $imagePath = $workload['image_path'];
            if (empty($imagePath)) {
                return Gearman::serializeWorkload(['status' => 'error', 'message' => 'No image']);
            }

            // Do some job...

            return Gearman::serializeWorkload(['status' => 'success', 'foo' => 'bar']);
        });
    }
}
````
Update /app/Console/Kernel.php:<br />
Add to `protected $commands`:
```php
protected $commands = [
    // ...
    \App\Console\Commands\CropImage::class,
]

Change supervisor config set and restart supervisor:

Yii2:, (*11)

php yii gearman
````

Yii1:
```bash
php yiic gearman
````

Laravel:
```bash
php artisan gearman
````


Examples
--------
##### Yii2:
At any place:
```php
// synchronous
$result = Yii::$app->gearman->doNormal('crop_image', ['image_path' => '/var/www/image.jpg']);
var_dump(Yii::$app->gearman->deserializeWorkload($result)); // ['status' => 'success', 'foo' => 'bar']
$result = Yii::$app->gearman->doNormal('crop_image');
var_dump(Yii::$app->gearman->deserializeWorkload($result)); // ['status' => 'error', 'message' => 'No image']

// asynchronous
$result = Yii::$app->gearman->doBackground('crop_image', ['image_path' => '/var/www/image.jpg']);
var_dump($result); // job handle file descriptior
$result = Yii::$app->gearman->doBackground('crop_image');
var_dump($result); // job handle file descriptior

// Variants:
// doLow(), doNormal(), doHigh(),
// doLowBackground(), doBackground(), doHighBackground(),
Yii1:

At any place:, (*12)

// synchronous
$result = Yii::app()->gearman->doNormal('crop_image', ['image_path' => '/var/www/image.jpg']);
var_dump(Yii::app()->gearman->deserializeWorkload($result)); // ['status' => 'success', 'foo' => 'bar']
$result = Yii::app()->gearman->doNormal('crop_image');
var_dump(Yii::app()->gearman->deserializeWorkload($result)); // ['status' => 'error', 'message' => 'No image']

// asynchronous
$result = Yii::app()->gearman->doBackground('crop_image', ['image_path' => '/var/www/image.jpg']);
var_dump($result); // job handle file descriptior
$result = Yii::app()->gearman->doBackground('crop_image');
var_dump($result); // job handle file descriptior

// Variants:
// doLow(), doNormal(), doHigh(),
// doLowBackground(), doBackground(), doHighBackground(),
Laravel:

At any place: ```php use Gearman;, (*13)

// synchronous $result = Gearman::doNormal('crop_image', ['image_path' => '/var/www/image.jpg']); var_dump(Gearman::deserializeWorkload($result)); // ['status' => 'success', 'foo' => 'bar'] $result = Gearman::doNormal('crop_image'); var_dump(Gearman::deserializeWorkload($result)); // ['status' => 'error', 'message' => 'No image'], (*14)

// asynchronous $result = Gearman::doBackground('crop_image', ['image_path' => '/var/www/image.jpg']); var_dump($result); // job handle file descriptior $result = Gearman::doBackground('crop_image'); var_dump($result); // job handle file descriptior, (*15)

// Variants: // doLow(), doNormal(), doHigh(), // doLowBackground(), doBackground(), doHighBackground(),, (*16)

The Versions

29/01 2018

dev-master

9999999-dev https://github.com/demisang/php-gearman#readme

Gearman job server workers helper

  Sources   Download

GNU GPL-3.0-or-later

The Requires

  • php >=5.3.0

 

laravel php yii2 server job supervisor yii1 gearman workers

29/01 2018

1.1.5

1.1.5.0 https://github.com/demisang/php-gearman#readme

Gearman job server workers helper

  Sources   Download

GPL-3.0-or-later

The Requires

  • php >=5.3.0

 

laravel php yii2 server job supervisor yii1 gearman workers

03/11 2016

1.1.4

1.1.4.0 https://github.com/demisang/php-gearman#readme

Gearman job server workers helper

  Sources   Download

GNU

The Requires

  • php >=5.3.0

 

laravel php yii2 server job supervisor yii1 gearman workers

15/07 2016

1.1.3

1.1.3.0 https://github.com/demisang/php-gearman#readme

Gearman job server workers helper

  Sources   Download

GNU

The Requires

  • php >=5.3.0

 

laravel php yii2 server job supervisor yii1 gearman workers

28/06 2016

1.1.2

1.1.2.0 https://github.com/demisang/php-gearman#readme

Gearman job server workers helper

  Sources   Download

GNU

The Requires

  • php >=5.3.0

 

laravel php yii2 server job supervisor yii1 gearman workers

22/06 2016

1.1.0

1.1.0.0 https://github.com/demisang/php-gearman#readme

Gearman job server workers helper

  Sources   Download

GNU

The Requires

  • php >=5.3.0

 

laravel php yii2 server job supervisor yii1 gearman workers

22/06 2016

1.1.1

1.1.1.0 https://github.com/demisang/php-gearman#readme

Gearman job server workers helper

  Sources   Download

GNU

The Requires

  • php >=5.3.0

 

laravel php yii2 server job supervisor yii1 gearman workers

06/06 2016

1.0.14

1.0.14.0 https://github.com/demisang/php-gearman#readme

Gearman job server workers helper

  Sources   Download

GNU

The Requires

  • php >=5.3.0

 

laravel php yii2 server job supervisor yii1 gearman workers

02/06 2016

1.0.13

1.0.13.0 https://github.com/demisang/php-gearman#readme

Gearman job server workers helper

  Sources   Download

GNU

The Requires

  • php >=5.3.0

 

laravel php yii2 server job supervisor yii1 gearman workers

22/05 2016

1.0.12

1.0.12.0 https://github.com/demisang/php-gearman#readme

Gearman job server workers helper

  Sources   Download

GNU

The Requires

  • php >=5.3.0

 

laravel php yii2 server job supervisor yii1 gearman workers

18/05 2016

1.0.11

1.0.11.0 https://github.com/demisang/php-gearman#readme

Gearman job server workers helper

  Sources   Download

GNU

The Requires

  • php >=5.3.0

 

php server job supervisor gearman workers

18/05 2016

1.0.10

1.0.10.0 https://github.com/demisang/php-gearman#readme

Gearman job server workers helper

  Sources   Download

GNU

The Requires

  • php >=5.3.0

 

php server job supervisor gearman workers

18/05 2016

1.0.9

1.0.9.0 https://github.com/demisang/php-gearman#readme

Gearman job server workers helper

  Sources   Download

GNU

The Requires

  • php >=5.3.0

 

php server job supervisor gearman workers

18/05 2016

1.0.8

1.0.8.0 https://github.com/demisang/php-gearman#readme

Gearman job server workers helper

  Sources   Download

GNU

The Requires

  • php >=5.3.0

 

php server job supervisor gearman workers

18/05 2016

1.0.7

1.0.7.0 https://github.com/demisang/php-gearman#readme

Gearman job server workers helper

  Sources   Download

GNU

The Requires

  • php >=5.3.0

 

php server job supervisor gearman workers

18/05 2016

1.0.6

1.0.6.0 https://github.com/demisang/php-gearman#readme

Gearman job server workers helper

  Sources   Download

GNU

The Requires

  • php >=5.3.0

 

php server job supervisor gearman workers

18/05 2016

1.0.5

1.0.5.0 https://github.com/demisang/php-gearman#readme

Gearman job server workers helper

  Sources   Download

GNU

The Requires

  • php >=5.3.0

 

php server job supervisor gearman workers

18/05 2016

1.0.4

1.0.4.0 https://github.com/demisang/php-gearman#readme

Gearman job server workers helper

  Sources   Download

GNU

The Requires

  • php >=5.3.0

 

php server job supervisor gearman workers

18/05 2016

1.0.3

1.0.3.0 https://github.com/demisang/php-gearman#readme

Gearman job server workers helper

  Sources   Download

GNU

The Requires

  • php >=5.3.0

 

php server job supervisor gearman workers

18/05 2016

1.0.2

1.0.2.0 https://github.com/demisang/php-gearman#readme

Gearman job server workers helper

  Sources   Download

GNU

The Requires

  • php >=5.3.0

 

php server job supervisor gearman workers

18/05 2016

1.0.1

1.0.1.0 https://github.com/demisang/php-gearman#readme

Gearman job server workers helper

  Sources   Download

GNU

The Requires

  • php >=5.3.0

 

php server job supervisor gearman workers

17/05 2016

1.0.0

1.0.0.0 https://github.com/demisang/php-gearman#readme

Gearman job server workers helper

  Sources   Download

GNU

The Requires

  • php >=5.3.0

 

php server job supervisor gearman workers

17/05 2016

0.0.1

0.0.1.0 https://github.com/demisang/php-gearman#readme

Gearman job server workers helper

  Sources   Download

GNU

The Requires

  • php >=5.3.0

 

php server job supervisor gearman workers