Download the PHP package rybakit/phive-queue without Composer
On this page you can find all versions of the php package rybakit/phive-queue. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Informations about the package phive-queue
Phive Queue
Phive Queue is a time-based scheduling queue with multiple backend support.
Table of contents
- Installation
- Usage example
- Queues
- MongoQueue
- RedisQueue
- TarantoolQueue
- PheanstalkQueue
- GenericPdoQueue
- SqlitePdoQueue
- SysVQueue
- InMemoryQueue
- Item types
- Exceptions
- Tests
- Performance
- Concurrency
- License
Installation
The recommended way to install Phive Queue is through Composer:
Usage example
Queues
Currently, there are the following queues available:
- MongoQueue
- RedisQueue
- TarantoolQueue
- PheanstalkQueue
- GenericPdoQueue
- SqlitePdoQueue
- SysVQueue
- InMemoryQueue
MongoQueue
The MongoQueue
requires the Mongo PECL extension (v1.3.0 or higher).
Tip: Before making use of the queue, it's highly recommended to create an index on a eta
field:
Constructor
Parameters:
mongoClient The MongoClient instance
dbName The database name
collName The collection name
Example
RedisQueue
For the RedisQueue
you have to install the Redis PECL extension (v2.2.3 or higher).
Constructor
Parameters:
redis The Redis instance
Example
TarantoolQueue
To use the TarantoolQueue
you have to install the Tarantool PECL
extension and a Lua script for managing queues.
Constructor
Parameters:
tarantool The Tarantool instance
tubeName The tube name
space Optional. The space number. Default to 0
Example
PheanstalkQueue
The PheanstalkQueue
requires the Pheanstalk
library (Beanstalk client) to be installed:
Constructor
Parameters:
pheanstalk The Pheanstalk\PheanstalkInterface instance
tubeName The tube name
Example
GenericPdoQueue
The GenericPdoQueue
is intended for PDO drivers whose databases support stored procedures/functions
(in fact all drivers except SQLite).
The GenericPdoQueue
requires PDO and a PDO driver
for a particular database be installed. On top of that PDO error mode must be set to throw
exceptions (PDO::ERRMODE_EXCEPTION
).
SQL files to create the table and the stored routine can be found in the res directory.
Constructor
Parameters:
pdo The PDO instance
tableName The table name
routineName Optional. The routine name. Default to tableName_pop
Example
SqlitePdoQueue
The SqlitePdoQueue
requires PDO and SQLite PDO driver.
On top of that PDO error mode must be set to throw exceptions (PDO::ERRMODE_EXCEPTION
).
SQL file to create the table can be found in the res/sqlite directory.
Tip: For performance reasons it's highly recommended to activate WAL mode:
Constructor
Parameters:
pdo The PDO instance
tableName The table name
Example
SysVQueue
The SysVQueue
requires PHP to be compiled with the option --enable-sysvmsg.
Constructor
Parameters:
key The message queue numeric ID
serialize Optional. Whether to serialize an item or not. Default to false
perms Optional. The queue permissions. Default to 0666
Example
InMemoryQueue
The InMemoryQueue
can be useful in cases where the persistence is not needed. It exists only in RAM
and therefore operates faster than other queues.
Constructor
Example
Item types
The following table details the various item types supported across queues.
Queue/Type | string | binary string | null | bool | int | float | array | object |
---|---|---|---|---|---|---|---|---|
MongoQueue | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||
RedisQueue | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓* | ✓* |
TarantoolQueue | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||
PheanstalkQueue | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ||
GenericPdoQueue | ✓ | ✓ | ✓ | ✓ | ✓ | |||
SqlitePdoQueue | ✓ | ✓ | ✓ | ✓ | ✓ | |||
SysVQueue | ✓ | ✓ | ✓* | ✓ | ✓ | ✓ | ✓* | ✓* |
InMemoryQueue | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
✓* — supported if the serializer is enabled.
To bypass the limitation of unsupported types for the particular queue you could convert an item
to a non-binary string before pushing it and then back after popping. The library ships with
the TypeSafeQueue
decorator which does that for you:
Exceptions
Every queue method declared in the Queue interface will throw an exception if a run-time error occurs at the time the method is called.
For example, in the code below, the push()
call will fail with a MongoConnectionException
exception in a case a remote server unreachable:
But sometimes you may want to catch exceptions coming from a queue regardless of the underlying driver.
To do this just wrap your queue object with the ExceptionalQueue
decorator:
And then, to catch queue level exceptions use the QueueException
class:
Tests
Phive Queue uses PHPUnit for unit and integration testing. In order to run the tests, you'll first need to install the library dependencies using composer:
You can then run the tests:
You may also wish to specify your own default values of some tests (db names, passwords, queue sizes, etc.). You can do it by setting environment variables from the command line:
You may also create your own phpunit.xml
file by copying the phpunit.xml.dist
file and customize to your needs.
Performance
To check the performance of queues run:
This test inserts a number of items (1000 by default) into a queue, and then retrieves them back.
It measures the average time for push
and pop
operations and outputs the resulting stats, e.g.:
You may also change the number of items involved in the test by changing the PHIVE_PERF_QUEUE_SIZE
value in your phpunit.xml
file or by setting the environment variable from the command line:
Concurrency
In order to check the concurrency you'll have to install the Gearman server and the German PECL extension. Once the server has been installed and started, create a number of processes (workers) by running:
Then run the tests:
This test inserts a number of items (100 by default) into a queue, and then each worker tries to retrieve them in parallel.
You may also change the number of items involved in the test by changing the PHIVE_CONCUR_QUEUE_SIZE
value in your phpunit.xml
file or by setting the environment variable from the command line:
License
Phive Queue is released under the MIT License. See the bundled LICENSE file for details.