Skip to content
/ queue Public

📮 Flexible abstraction for working with queues in PHP.

License

Notifications You must be signed in to change notification settings

graze/queue

Folders and files

NameName
Last commit message
Last commit date

Latest commit

c3a6f7f Â· May 25, 2018
May 25, 2018
May 25, 2018
May 25, 2018
May 25, 2018
Aug 28, 2015
Nov 20, 2015
May 26, 2015
May 25, 2018
Mar 29, 2017
May 25, 2018
May 25, 2018
Mar 22, 2017
May 25, 2018

Repository files navigation

Queue

PHP ~5.5 Latest Version MIT Licensed Build Status Coverage Status Quality Score Total Downloads

This library provides a flexible abstraction layer for working with queues.

It can be installed in whichever way you prefer, but we recommend Composer.

~$ composer require graze/queue

Documentation

Queue operations center around lists of Message objects. Whether you're sending one or multiple Messages, it's always an array. Workers work only on one Message object at a time, whether a list of one or multiple is received from the queue.

use Aws\Sqs\SqsClient;
use Graze\Queue\Adapter\SqsAdapter;
use Graze\Queue\Client;
use Graze\Queue\Message\MessageInterface;

$client = new Client(new SqsAdapter(new SqsClient([
    'region'  => 'us-east-1',
    'version' => '2012-11-05',
    'credentials' => [
        'key'    => 'ive_got_the_key',
        'secret' => 'ive_got_the_secret'
    ],
]), 'queue_name'));

// Producer
$client->send([
    $client->create('foo'),
]);

// Consumer
$client->receive(function (MessageInterface $msg) {
    var_dump($msg->getBody());
    var_dump($msg->getMetadata()->getAll());
});

Adapters

The Adapter object is used to fulfill the low level requests to the queue provider.

Currently supported queue providers are:

Handlers

The Handler object is used to execute worker callables with a list of received messages and handle Acknowledgement.

The current handlers are:

use Graze\Queue\Client;
use Graze\Queue\Adapter\ArrayAdapter;
use Graze\Queue\Handler\BatchAcknowledgementHandler;
use Graze\Queue\Message\MessageInterface;

// Create client with the Batch Acknowledgement Handler.
$client = new Client(new ArrayAdapter(), [
    'handler' => new BatchAcknowledgementHandler(),
]);

// Receive a maximum of 10 messages.
$client->receive(function (MessageInterface $message) {
    // Do some work.
}, 10);

Polling

Polling a queue is supported by passing null as the limit argument to the receive method. The second argument given to your worker is a Closure you should use to stop polling when you're finished working. Make sure you use a handler that acknowledges work effectively too!

Note that the individual Adapter objects may decide to stop polling at any time. A likely scenario where it may stop would be if the queue is of finite length and all possible messages have been received.

use Graze\Queue\Client;
use Graze\Queue\Adapter\ArrayAdapter;
use Graze\Queue\Handler\BatchAcknowledgementHandler;
use Graze\Queue\Message\MessageInterface;

// Create client with the Batch Acknowledgement Handler.
$client = new Client(new ArrayAdapter(), [
    'handler' => new BatchAcknowledgeHandler(100), // Acknowledge after 100 messages.
]);

// Poll until `$done()` is called.
$client->receive(function (MessageInterface $message, Closure $done) {
    // Do some work.

    // You should always define a break condition (i.e. timeout, expired session, etc).
    if ($breakCondition) $done();
}, null);

License

The content of this library is released under the MIT License by Nature Delivered Ltd.

You can find a copy of this license in LICENSE or at http://opensource.org/licenses/mit.