treehouselabs / worker-bundle
Adds worker functionality to a Symfony2 project, using Beanstalkd as the message queue
Installs: 57 215
Dependents: 1
Suggesters: 1
Security: 0
Stars: 13
Watchers: 7
Forks: 7
Open Issues: 4
Type:symfony-bundle
Requires
- php: >=7.0
- pda/pheanstalk: ^3.0
- symfony/symfony: ^2.8|^3.0|^4.0
Requires (Dev)
- doctrine/orm: ^2.3
- monolog/monolog: ^1.10.0
- phpunit/phpunit: ^6.0
README
This bundle is no longer maintained. It will still work with Symfony versions ^2.8|^3.0|^4.0
and is archived here to not break existing applications using it. However it will not get maintenance updates or even security fixes.
If you need queue/worker functionality in your project, there are far better solutions right now to look at:
Previous readme below 👇
Worker bundle
A Symfony bundle that adds worker functionality to your project, using Beanstalkd as the message queue.
Installation
For this process, we assume you have a Beanstalk server up and running.
Install via Composer:
$ composer require treehouselabs/worker-bundle
Enable the bundle:
# app/AppKernel.php class AppKernel extends Kernel { public function registerBundles() { $bundles = [ // ... new TreeHouse\WorkerBundle\TreeHouseWorkerBundle(), ]; // ... } // ... }
Configuration
Define a queue and you're good to go:
# app/config/config.yml tree_house_worker: queue: server: localhost
The bundle also supports the PheanstalkBundle, if you're using that:
# app/config/config.yml tree_house_worker: pheanstalk: leezy.pheanstalk
Basic Usage
The bundle creates a QueueManager
service, which you can use to manage
jobs. The manager has services registered to execute specific tasks, called
executors. An executor receives a job from the QueueManager and processes it.
Defining executors
First you need to register an executor, and tag it as such:
# src/AppBundle/Executor/HelloWorldExecutor.php use TreeHouse\WorkerBundle\Executor\AbstractExecutor; class HelloWorldExecutor extends AbstractExecutor { public function getName() { return 'hello.world'; } public function configurePayload(OptionsResolver $resolver) { $resolver->setRequired(0); } public function execute(array $payload) { $name = array_shift($payload); # process stuff here, in this example we just print something echo 'Hello, ' . $name; return true; } }
# app/config/services.yml app.executor.hello_world: class: AppBundle/Executor/HelloWorldExecutor tags: - { name: tree_house.worker.executor }
Scheduling jobs
Now you can add jobs, either via code or using the worker:schedule
command:
In your application's code:
$queueManager = $container->get('tree_house.worker.queue_manager'); $queueManager->add('hello.world', ['Peter']);
Using the command:
php app/console worker:schedule hello.world Peter
Working jobs
A worker can now receive and process these jobs via the console:
php app/console worker:run
# prints:
# Working hello.world with payload ["Peter"]
# Hello, Peter
# Completed job in 1ms with result: true
You can run workers by adding them to your crontab, creating a Supervisor program for it, or whatever your preferred method is.
Documentation
Security
If you discover any security related issues, please email dev@treehouse.nl instead of using the issue tracker.
License
The MIT License (MIT). Please see License File for more information.