Task queue
Bundle for offloading work to server side. Can add service tasks/jobs to queue for later execution.
Queue runs can safely overlap since tasks are locked upon acquiring by runner.
For forking and other funnies:
{
"require": {
"glorpen/queue-bundle": "*"
}
}
app/AppKernel.php
<?php
class AppKernel extends AppKernel
{
public function registerBundles()
{
$bundles = array(
...
new Glorpen\QueueBundle\GlorpenQueueBundle(),
...
);
}
}
Bundle configuration:
glorpen_queue:
backend: propel
To add new task:
<?php
$queue = $container->get("glorpen.queue");
$queue->create('my.tasks_container', 'myMethod', array("arg1", 2));
Then to execute use app/console queue:run:
Starting task test:method Task 1:test:method ended after 0 seconds with status "failed"
Remember that:
Other useful commands:
queue:restart-failed simply marks failed tasks as pendingqueue:update marks crashed (eg. on OOM) tasks as failed and removes succesfull tasksTo add new named task:
<?php
$queue = $container->get("glorpen.queue");
$queue->create('my.tasks_container', 'myMethod', array("arg1", 2), 'now', 'my_named_task');
Then you can retrieve it with:
<?php
$queue = $container->get("glorpen.queue");
$task = $queue->getTask('my_named_task');
echo $task->getStatus();
echo $task->getProgress();
When creating named task:
Inside executing task you can set its current progress:
<?php
$queue = $container->get("glorpen.queue");
$queue->setCurrentTaskProgress(50);