Skip to content

keystonephp/queue

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

50 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Keystone Queue

Build Status

A PHP library to create and process background tasks with any queueing service.

Supported queue services:

Features:

  • Compatible with any queueing service via provider/publisher interfaces.
  • Middleware to hook into the processing flow (inspired by PSR-15).
  • Route task messages to workers registered as services in PSR-11/Symfony containers.

Middleware:

  • Automatically close timed out Doctrine DBAL connections.
  • Automatically clear the Doctrine ORM managers to free memory.
  • Limit the maximum execution time of the consumer.
  • Limit the maximum number of messages a consumer will process.
  • Limit the maximum amount of memory a consumer is allowed to use.
  • Retry failed tasks using an exponential backoff strategy.
  • Handle signals to terminate the consumer process safely.

Requirements

PHP 7.0 or above is required.

Getting started

Install the library with Composer.

composer require keystone/queue

Create a message class for the task.

use Keystone\Queue\Message;

class HardMessage implements Message
{
    public $name;
    public $count;

    public function __construct(string $name, int $count)
    {
        $this->name = $name;
        $this->count = $count;
    }

    public function getKey(): string
    {
        // The message key is used to determine which queue to publish to.
        return 'hard';
    }
}

Create a worker class capable of processing the message.

class HardWorker
{
    public function process(HardMessage $message)
    {
        // Do some work to process the message.
    }
}

Publish a message within your application.

use Keystone\Queue\Publisher;

$publisher = new Publisher(...);
// The message is serialized when publishing and unserialized when consuming
$publisher->publish(new HardMessage('Billy', 12));

Consume the messages in a long running process.

use Keystone\Queue\Consumer;
use Keystone\Queue\Provider;

$provider = new Provider(...);
$consumer = new Consumer($provider, ...);
// The consumer will poll the queue for new messages and process them.
$consumer->consume();

Credits

License

Released under the MIT Licence. See the bundled LICENSE file for details.

About

Create and process background tasks with any queueing service

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages