Keystone Queue
, (*1)
A PHP library to create and process background tasks with any queueing service., (*2)
Supported queue services:, (*3)
Features:, (*4)
- 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:, (*5)
- 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., (*6)
Getting started
Install the library with Composer., (*7)
composer require keystone/queue
Create a message class for the task., (*8)
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., (*9)
class HardWorker
{
public function process(HardMessage $message)
{
// Do some work to process the message.
}
}
Publish a message within your application., (*10)
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., (*11)
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., (*12)