.. ================================================== .. FOR YOUR INFORMATION .. -------------------------------------------------- .. -*- coding: utf-8 -*- with BOM. .. _start: .. image:: https://travis-ci.org/r3h6/TYPO3.EXT.jobqueue.svg?branch=master :target: https://travis-ci.org/r3h6/TYPO3.EXT.jobqueue ============= Documentation ============= Job queues for TYPO3 CMS. This extension provides a simple in-memory queue and a cli or scheduler command to execute jobs. This extension is a backport of the flow package `Flowpack/jobqueue-common `_. .. note:: You should install also one of the following extensions **jobqueue_database**, **jobqueue_beanstalkd** or **jobqueue_redis**. Configuration ------------- In the extension settings you can set the default queue class. You can define for each queue different settings over TYPO3_CONF_VARS. **Example:** .. code-block:: php $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['jobqueue']['myQueueName'] = [ 'className' => 'R3H6\\JobqueueBeanstalkd\\Queue\\BeanstalkdQueue', 'options' => [ // Options are passed into the constructor of the queue ], ]; Creating a job -------------- Jobs must implement the ``R3H6\Jobqueue\Job\JobInterface`` interface which extends ``Serializable`` itself. .. note:: Jobs are getting serialized. It is recommended to serialize only data and no dependencies because queues could have a data limit. **Example:** .. code-block:: php identifier = $identifier; } public function execute(\R3H6\Jobqueue\Queue\QueueInterface $queue, \R3H6\Jobqueue\Queue\Message $message) { // Do the job... return true; } public function getIdentifier(){ return $this->identifier; } public function getLabel(){ return $this->label; } public function serialize() { // You must take care of serialization by yourself! return serialize([$this->identifier]); } public function unserialize($data) { // You must take care of unserialization by yourself! call_user_func_array([$this, '__construct'], unserialize($data)); } } Queue a job ----------- When you created a job you can add the job to a queue over the ``JobManager``. **Example:** .. code-block:: php $myJob = GeneralUtility::makeInstance(\Vendor\ExtName\Job\MyJob::class, 'test'); $jobManager = GeneralUtility::makeInstance(ObjectManager::class)->get(JobManager::class); $jobManager->queue('myQueueName', $myJob); Executing a job --------------- You can execute jobs over the ExtBase scheduler task "Jobqueue Job: work" or the cli command "extbase job:work". Daemon ^^^^^^ You can try to use the experimental scheduler task "Jobqueue Job: daemon". If you are using something like "upstart" you should call the cli command "extbase job:work" with "--limit=0". Commands -------- ``typo3/cli_dispatch.phpsh extbase jow:work --queue-name --timeout --limit`` :$queueName: The name of the queue to work on. :$timeout: Seconds to wait for a job in the queue. :$limit: Number of jobs to be done, -1 for all jobs in queue, 0 for work infinite Signal and Slots ---------------- .. t3-field-list-table:: - :Class: Signal Class Name :Name: Signal Name :Method: Located in Method :Arguments: Passed arguments :Description: Description - :Class: R3H6\\Jobqueue\\Job\\JobManager :Name: jobFailed :Method: waitAndExecute() :Arguments: $queueName, R3H6\Jobqueue\Queue\Message $message :Description: Dispatched when a job fails and reached the max attemps. Differences to the flow package ------------------------------- * Namespace * Jobs must satisfy also the ``Serializable`` interface. Contributing ------------ Bug reports and pull request are welcome through `GitHub `_.