Laraval / Lumen Gearman Remote Procedure Call
Requires:
- Laravel / Lumen >=5.5
- PHP >= 7.1
- Gearman PHP extension
- Socket PHP extension
- Run:
composer require "gitkv/laravel-gearman-rpc"
- Install gearman job server as PHP-extension: http://gearman.org/getting-started/#gearman_php_extension
- Install supervisor:
apt-get install supervisor
Add service provider to /config/app.php:
'providers' => [
gitkv\GearmanRpc\GearmanRpcServiceProvider::class
],
'aliases' => [
'GearmanRpc' => gitkv\GearmanRpc\Facade\GearmanRpc::class,
],
Publish config/gearman-rpc.php
php artisan vendor:publish --provider="gitkv\GearmanRpc\GearmanRpcServiceProvider" --tag=config
Create a file in the directory app\Rpc\MyRpcHandler.php
<?php
namespace App\Rpc;
use gitkv\GearmanRpc\HandlerContract;
class MyRpcHandler implements HandlerContract {
public function handle($payload) {
return [
'status' => 'success',
'payload' => $payload,
];
}
}
Add your handler to the handlers
section in the config/gearman-rpc.php
file
'MyExampleFunction' => \App\Rpc\MyRpcHandler::class,
Example supervisor config
[program:app-rpc-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/app/artisan gearman-rpc
autostart=true
autorestart=true
user = www
numprocs=1
redirect_stderr=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
Synch call
<?php
$result = GearmanRpc::doNormal('MyExampleFunction', json_encode(['test'=>'data']));
Asynch call
<?php
GearmanRpc::doBackground('MyExampleFunction', json_encode(['test'=>'data']));