1. Go to this page and download the library: Download ulabox/gearman-bundle library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
ulabox / gearman-bundle example snippets
// app/AppKernel.php
public function registerBundles()
{
$bundles = array(
// ...
new Ulabox\Bundle\GearmanBundle\UlaboxGearmanBundle(),
// ...
);
}
namespace Acme\DemoBundle\Gearman\Worker;
use Ulabox\Bundle\GearmanBundle\Model\ContainerAwareWorker;
use Ulabox\Bundle\GearmanBundle\Annotation\Worker;
use Ulabox\Bundle\GearmanBundle\Annotation\Job;
/**
* The worker.
*
* @Worker()
*/
class AcmeWorker extends ContainerAwareWorker
{
/**
* The hello world job.
*
* @param \GearmanJob $job The GearmanJob instance
* @return boolean
* @Job()
*/
public function hello_world(\GearmanJob $job)
{
echo "Received hello world job: " . $job->handle() . "\n";
$workload = $job->workload();
$workloadSize = $job->workloadSize();
echo "Workload: $workload ($workloadSize)\n";
// This status loop is not needed, just to show how work
for ($i = 0; $i < $workloadSize; $i ++) {
echo "Sending status: " . $i . "/$workloadSize completed\n";
$job->sendStatus($i, $workloadSize);
sleep(1);
}
echo "Result: '".$workload."' loaded\n";
return true;
}
/**
* This job is never call, because is not marked with @Job annotation.
*
* @param \GearmanJob $job The GearmanJob instance
* @return boolean
*/
public function never_call_job(\GearmanJob $job)
{
...
}
}
// get the gearman manager
$gearmanManager = $this->container->get('ulabox_gearman.manager');
// get the generic gearman client
$client = $gearmanManager->getClient('UlaboxGearmanBundle:GearmanClient');
// find your worker
$worker = $gearmanManager->getWorker('AcmeDemoBundle:AcmeWorker');
// now you should tell the client that worker must be run
$client->setWorker($worker);
// and finally do the job
$client->doNormalJob('hello_world', json_encode(array('foo' => 'bar')));
// do the job in backgroud
//$client->doBackgroundJob('hello_world', json_encode(array('foo' => 'bar')));
namespace Acme\DemoBundle\Gearman\Client;
use Ulabox\Bundle\GearmanBundle\Annotation\Client;
use Ulabox\Bundle\GearmanBundle\Model\Client as BaseClient;
/**
* The client
*
* @Client()
*/
class AcmeClient extends BaseClient
{
public function hello_world_status($status)
{
print_r("AcmeClient::Status ".$status."\n");
}
public function hello_world_data($task)
{
print_r("AcmeClient::Data: ".$task->data()."\n");
}
public function hello_world_fail($task)
{
print_r("AcmeClient::Failed: ".$task->jobHandle()."\n");
}
public function hello_world_success($result)
{
print_r("AcmeClient::Success: ".$result);
}
}
// get the gearman manager
$gearmanManager = $this->container->get('ulabox_gearman.manager');
// get the acme client
$client = $gearmanManager->getClient('AcmeDemoBundle:AcmeClient');
// and finally do the job
$client->doNormalJob('hello_world', json_encode(array('foo' => 'bar')));
// do the job in backgroud
//$client->doBackgroundJob('hello_world', json_encode(array('foo' => 'bar')));
namespace Acme\DemoBundle\Gearman\Worker;
use Ulabox\Bundle\GearmanBundle\Model\ContainerAwareWorker;
use Ulabox\Bundle\GearmanBundle\Annotation\Worker;
use Ulabox\Bundle\GearmanBundle\Annotation\Job;
/**
* The worker.
*
* @Worker(servers={"127.0.0.1:4730"}, iterations=10)
*/
class AcmeWorker extends ContainerAwareWorker
{
/**
* Execute a job.
*
* @param \GearmanJob $job The GearmanJob instance
*
* @return boolean
*
* @Job()
*/
public function hello_world(\GearmanJob $job)
{
echo "Received hello world job: " . $job->handle() . "\n";
$workload = $job->workload();
$workloadSize = $job->workloadSize();
echo "Workload: $workload ($workloadSize)\n";
// This status loop is not needed, just to show how work
for ($i = 0; $i < $workloadSize; $i ++) {
echo "Sending status: " . $i . "/$workloadSize completed\n";
$job->sendStatus($i, $workloadSize);
sleep(1);
}
echo "Result: '".$workload."' loaded\n";
return true;
}
/**
* Execute a job.
*
* @param \GearmanJob $job The GearmanJob instance
*
* @return boolean
*
* @Job()
*/
public function send_newsletter(\GearmanJob $job)
{
$users = json_decode($job->workload(), true);
foreach ($users as $name => $email) {
echo "Be sent an email to $name\n";
// send the email
echo "The email have been send to $email\n\n";
sleep(1);
}
echo count($users)." mails have been sent \n";
return true;
}
}
// get the gearman manager
$gearmanManager = $this->container->get('ulabox_gearman.manager');
// get the acme client
$client = $gearmanManager->getClient('AcmeDemoBundle:AcmeClient');
// add multiple background tasks
$client->addTaskBackground('hello_world', json_encode(array('foo' => 'bar')));
$client->addTaskBackground('send_newsletter', json_encode(array('Ivan' => '[email protected]', 'Ulabox' => '[email protected]')));
// run tasks
$client->runTasks();
namespace Acme\DemoBundle\Event;
use Ulabox\Bundle\GearmanBundle\Dispatcher\AsyncEventInterface;
use Symfony\Component\EventDispatcher\Event;
use Acme\DemoBundle\Entity\User;
/**
* The custom async event.
*/
class FooEvent extends Event implements AsyncEventInterface
{
/**
* The user entity
*
* @var User
*/
protected $user;
/**
* Construstor.
*
* @param User $user The user instance
*/
public function __construct(User $user)
{
$this->user = $user;
}
/**
* {@inheritdoc}
*/
public function getUser()
{
return $this->user;
}
/**
* {@inheritdoc}
*/
public function getArguments()
{
return array(
'user' => $this->user
);
}
/**
* {@inheritdoc}
*/
public function setArguments(array $args = array())
{
$this->user = $args['user'];
}
}
namespace Acme\DemoBundle\EventListener;
use Acme\DemoBundle\Event\FooEvent;
/**
* Foo listener
*/
class FooListener
{
/**
* Listener on foo event
*
* @param FooEvent $event The event
*/
public function onFoo(FooEvent $event)
{
$user = $event->getUser();
// do something
}
}
namespace Acme\DemoBundle\Controller;
use Acme\DemoBundle\Event\FooEvent;
/**
* Demo controller
*/
class DemoController
{
public function someAction()
{
...
$user = $this->get('security.context')->getToken()->getUser();
$eventDispatcher = $this->get('event_dispatcher');
// dispatch the event
$eventDispatcher->dispatchAsync('foo.event', new FooEvent($user));
...
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.