PHP client for beanstalkd queue

Related tags

Queue pheanstalk
Overview

Pheanstalk

Latest Stable Version Total Downloads Scrutinizer Code Quality Code Coverage Build Status

Pheanstalk is a pure PHP 7.1+ client for the beanstalkd workqueue. It has been actively developed, and used in production by many, since late 2008.

Created by Paul Annesley, Pheanstalk is rigorously unit tested and written using encapsulated, maintainable object oriented design. Community feedback, bug reports and patches has led to a stable 1.0 release in 2010, a 2.0 release in 2013, and a 3.0 release in 2014.

Pheanstalk 3.0 introduces PHP namespaces, PSR-1 and PSR-2 coding standards, and PSR-4 autoloader standard.

beanstalkd up to the latest version 1.10 is supported. All commands and responses specified in the protocol documentation for beanstalkd 1.3 are implemented.

Pheanstalk 4

In 2018 Sam Mousa took on the responsibility of maintaining Pheanstalk.

Pheanstalk 4.0 drops support for older PHP versions. It contains the following changes (among other things):

  • Strict PHP type hinting
  • Value objects for Job IDs
  • Functions without side effects
  • Dropped support for persistent connections
  • Add support for multiple socket implementations (streams extension, socket extension, fsockopen)

Dropping support persistent connections

Persistent connections are a feature where a TCP connection is kept alive between different requests to reduce overhead from TCP connection set up. When reusing TCP connections we must always guarantee that the application protocol, in this case beanstalks' protocol is in a proper state. This is hard, and in some cases impossible; at the very least this means we must do some tests which cause roundtrips. Consider for example a connection that has just sent the command PUT 0 4000. The beanstalk server is now going to read 4000 bytes, but if the PHP script crashes during this write the next request get assigned this TCP socket. Now to reset the connection to a known state it used to subscribe to the default tube: use default. Since the beanstalk server is expecting 4000 bytes, it will just write this command to the job and wait for more bytes..

To prevent these kinds of issues the simplest solution is to not use persistent connections.

Dropped connection handling

Depending on the socket implementation used we might not be able to enable TCP keepalive. If we do not have TCP keepalive there is no way for us to detect dropped connections, the underlying OS may wait up to 15 minutes to decide that a TCP connection where no packets are being sent is disconnected. When using a socket implementation that supports read timeouts, like SocketSocket which uses the socket extension we use read and write timeouts to detect broken connections; the issue with the beanstalk protocol is that it allows for no packets to be sent for extended periods of time. Solutions are to either catch these connection exceptions and reconnect or use reserveWithTimeout() with a timeout that is less than the read / write timeouts.

Example code for a job runner could look like this (this is real production code):

while(true) {
    $job = $beanstalk->reserveWithTimeout(50);
    $this->stdout('.', Console::FG_CYAN);
    if (isset($job)) {
        $this->ensureDatabase($db);
        try {
            /** @var HookTask $task */
            $task = $taskFactory->createFromJson($job->getData());

            $commandBus->handle($task);
            $this->stdout("Deleting job: {$job->getId()}\n", Console::FG_GREEN);
            $beanstalk->delete($job);
        } catch (\Throwable $t) {
            \Yii::error($t);
            $this->stderr("\n{$t->getMessage()}\n", Console::FG_RED);
            $this->stderr("{$t->getTraceAsString()}\n", Console::FG_RED);

            $this->stdout("Burying job: {$job->getId()}\n", Console::FG_YELLOW);
            $beanstalk->bury($job);
        }
    }
}

Here connection errors will cause the process to exit (and be restarted by a task manager).

Functions with side effects

In version 4 functions with side effects have been removed, functions like putInTube internally did several things:

  1. Switch to the tube
  2. Put the job in the new tube

In this example, the tube changes meaning that the connection is now in a different state. This is not intuitive and forces any user of the connection to always switch / check the current tube. Another issue with this approach is that it is harder to deal with errors. If an exception occurs it is unclear whether we did or did not switch tube.

Migration to v4

A migration should in most cases be relatively simple:

  • Change the constructor, either use the static constructor, use a DI container to construct the dependencies, or manually instantiate them.
  • Change instances of reserve() with a timeout to reserveWithTimeout(int $timeout) since reserve() no longer accepts a timeout parameter.
  • Run your tests, or use a static analyzer to test for calls to functions that no longer exist.
  • Make sure that you handle connection exceptions (this is not new to V4, only in V4 you will get more of them due to the default usage of a socket implementation that has read / write timeouts).

Installation with Composer

Install pheanstalk as a dependency with composer:

composer require pda/pheanstalk

Usage Example

Producer

<?php
require __DIR__ . '/vendor/autoload.php';

use Pheanstalk\Pheanstalk;

$pheanstalk = Pheanstalk::create('127.0.0.1');

// Queue a Job
$pheanstalk
  ->useTube('testtube')
  ->put("job payload goes here\n");

$pheanstalk
    ->useTube('testtube')
    ->put(
        json_encode(['test' => 'data']),  // encode data in payload
        Pheanstalk::DEFAULT_PRIORITY,     // default priority
        30, // delay by 30s
        60  // beanstalk will retry job after 60s
     );

Consumer / Worker

<?php
require __DIR__ . '/vendor/autoload.php';
use Pheanstalk\Pheanstalk;

$pheanstalk = Pheanstalk::create('127.0.0.1');

// we want jobs from 'testtube' only.
$pheanstalk->watch('testtube');

// this hangs until a Job is produced.
$job = $pheanstalk->reserve();

try {
    $jobPayload = $job->getData();
    // do work.

    sleep(2);
    // If it's going to take a long time, periodically
    // tell beanstalk we're alive to stop it rescheduling the job.
    $pheanstalk->touch($job);
    sleep(2);

    // eventually we're done, delete job.
    $pheanstalk->delete($job);
}
catch(\Exception $e) {
    // handle exception.
    // and let some other worker retry.
    $pheanstalk->release($job); 
}

Running the tests

If you have docker-compose installed running tests is as simple as:

> composer test

If you don't then you manually need to set up a beanstalk server and run:

> vendor/bin/phpunit

Contributors

License

© Paul Annesley

Released under the The MIT License

Comments
  • PHP Fatal error:  Uncaught exception 'Pheanstalk\Exception\SocketException' with message 'Socket timed out!

    PHP Fatal error: Uncaught exception 'Pheanstalk\Exception\SocketException' with message 'Socket timed out!

    After upgrading to the newer version of the pheanstalk package we encountered the below issue, i even tried downgrading it to v3.2.0 but still the issue persisted, it seems to work fine with v3.1.0 . The issue occurs when the worker is in idle state waiting for a job.

    Below is trace for the issue -:

    PHP Fatal error: Uncaught exception 'Pheanstalk\Exception\SocketException' with message 'Socket timed out!' in /var/www/html/test/pheanstalk/vendor/pda/pheanstalk/src/Socket/NativeSocket.php:115 Stack trace: #0 /var/www/html/test/pheanstalk/vendor/pda/pheanstalk/src/Connection.php(111): Pheanstalk\Socket\NativeSocket->getLine() #1 /var/www/html/test/pheanstalk/vendor/pda/pheanstalk/src/Pheanstalk.php(398): Pheanstalk\Connection->dispatchCommand(Object(Pheanstalk\Command\ReserveCommand)) #2 /var/www/html/test/pheanstalk/vendor/pda/pheanstalk/src/Pheanstalk.php(281): Pheanstalk\Pheanstalk->_dispatch(Object(Pheanstalk\Command\ReserveCommand)) #3 /var/www/html/test/pheanstalk/run.php(25): Pheanstalk\Pheanstalk->reserve() #4 /var/www/html/test/pheanstalk/run.php(42): Analytics_worker_process->get_data() #5 {main} thrown in /var/www/html/test/pheanstalk/vendor/pda/pheanstalk/src/Socket/NativeSocket.php on line 115

    Fatal error: Uncaught exception 'Pheanstalk\Exception\SocketException' with message 'Socket timed out!' in /var/www/html/test/pheanstalk/vendor/pda/pheanstalk/src/Socket/NativeSocket.php:115 Stack trace: #0 /var/www/html/test/pheanstalk/vendor/pda/pheanstalk/src/Connection.php(111): Pheanstalk\Socket\NativeSocket->getLine() #1 /var/www/html/test/pheanstalk/vendor/pda/pheanstalk/src/Pheanstalk.php(398): Pheanstalk\Connection->dispatchCommand(Object(Pheanstalk\Command\ReserveCommand)) #2 /var/www/html/test/pheanstalk/vendor/pda/pheanstalk/src/Pheanstalk.php(281): Pheanstalk\Pheanstalk->_dispatch(Object(Pheanstalk\Command\ReserveCommand)) #3 /var/www/html/test/pheanstalk/run.php(25): Pheanstalk\Pheanstalk->reserve() #4 /var/www/html/test/pheanstalk/run.php(42): Analytics_worker_process->get_data() #5 {main} thrown in /var/www/html/test/pheanstalk/vendor/pda/pheanstalk/src/Socket/NativeSocket.php on line 115

    opened by tusharvr09 24
  • What's the plan for V2.0 ?

    What's the plan for V2.0 ?

    I've noticed there is some information in the master branch about the version 2.0 and the 2.0-rc1. What's the plan for this version?

    Can you give feedback on issues that are open to know if we are following the idea you have about this library? There is issues open for more than a year now without comment.

    Cheers, Maxime

    opened by Maxwell2022 17
  • Any plan to support multiple servers?

    Any plan to support multiple servers?

    Would be nice to give pheanstalk an array of server ip's and ports and have it just randomly (or even not so randomly) choose which one to send the job to. This would eliminate all of the developers who use pheanstalk from having to roll their own sharding solution.

    opened by chadkouse 16
  • Add support for PHP 8.0

    Add support for PHP 8.0

    This PR adds support for PHP 8.0.

    • Tests now run on PHP 7.1, 7,2, 7.3, 7.4 and 8.0 on Ubuntu 18.04 (Bionic)
    • Tests run via github actions. Travis-Ci is shutting down soon anyway, and I had trouble with beanstalkd server connections from tests on Travis; it works fine on GitHub, and is faster too.
    • Tests updated to use PHPUnit 9.5 syntax. These are dynamically backported to older PHPUnit versions (using yoast/phpunit-polyfills – props to @jrfnl!) so that tests can run on older PHP versions without complicated CI config.
    • Some very minor issues fixed, mostly phpdoc, unneeded imports.
    • I have disabled code coverage support for now, no uploads to scrutinizer as a result (I've found that scrutinizer isn't that great anyway – better to use psalm/phpstan/phpinsights locally).
    opened by Synchro 12
  • reserve(..) makes php scripts zombies

    reserve(..) makes php scripts zombies

    Hi,

    We recently upgraded from 3.2 to 4.01 and we had $beanstalkd->reserve(5) on many places on our code.

    Our clusters suddenly started getting very unstable and every BE pod using Beanstalkd became Chromes munching like crazy on memory.

    After a LOT of debugging we found that reason was: $beanstalkd->reserve(5);

    This caused the queue workers to become zombies and eat memory. As php is not meant to keep running long time we have a setup that after x tasks / time the script is exited (killed) and then restarted. Because they became zombies they never exited but new ones were started so that added up.

    Changing it to: $job = $pheanstalk->reserveWithTimeout(5);

    Fixed the issue.

    Its not really a bug but more of a backward compability improvement where if you pass argument with reserve(..) it should give an error if nothing is done with it as reserve(5) now just acts the same as reserve().

    opened by StevenFlecha 11
  • Pheanstalk falls into infinite loop if beanstalkd is restarted

    Pheanstalk falls into infinite loop if beanstalkd is restarted

    NativeSocket's read doesn't handle fread's false result so it can cause infinite loop when connection is lost. I forked, made tests and solution. git://github.com/SlNPacifist/pheanstalk.git

    opened by SlNPacifist 10
  • when I use beanstalk in Multiple processes get a responsed error

    when I use beanstalk in Multiple processes get a responsed error

    Dear friends: I'm just learning beanstalk, and then I meet a error as follows:

    string(12) "INSERTED 190"
    /Users/pzr/myProject/public/yii2-amqp/vendor/pda/pheanstalk/src/Command/PutCommand.php:67:
    string(12) "INSERTED 191"
    /Users/pzr/myProject/public/yii2-amqp/vendor/pda/pheanstalk/src/Command/PutCommand.php:67:
    INSERTED 193"SERTED 192
    /Users/pzr/myProject/public/yii2-amqp/vendor/pda/pheanstalk/src/Command/PutCommand.php:67:
    string(1) "N"
    

    As you can see "INSERTED 193"SERTED 192" and "N" is not what excepted value, and obviously the returned string is out of whack. I used socket connected and in multiple processes , I think maybe the beanstalk server response is't block , so the response string be cuted. If I want to use beanstalk in multiple processes How I to do? Hope get your answer and thanks :)

    need more info 
    opened by easytoeasy 9
  • Add persistent connection support

    Add persistent connection support

    It uses pfsocketopen instead of fsocketopen. Did some initial testing (with hundreds of thousands of jobs and lots of clients) and socket reuse worked great.

    opened by sraka1 9
  • Pheanstalk needs maintainer(s)

    Pheanstalk needs maintainer(s)

    Many people are using Pheanstalk, but I haven't been able to give it the attention it deserves.

    I'd love to take on one or more maintainer (two sounds like a good number) to help push it forwards.

    Anybody interested?

    Let me know in what capacity you use Pheanstalk (e.g. for what purpose, at what company etc) [Optional. And be as vague or specific as you want]. And also what kind of changes you'd like to push forwards, or if you'd rather just work on fixing general maintenance issues that arise.

    Cheers, Paul

    opened by pda 9
  • socket_set_option

    socket_set_option

    Hi. I am using laravel and beanstalkd. Before jobs dispatched and worked. Now i received exception error below. After searching i found something and i replaced the vendor\pda\pheanstalk\src\Socket\SocketSocket.php:39
    socket_set_option($this->socket, SOL_TCP, SO_KEEPALIVE, 1); to socket_set_option($this->socket, SOL_SOCKET, SO_KEEPALIVE, 1); and it works. Why is this happening. I ma not sure if it is related but i was working on creating a php websocket connection between xampp and my view (client). I dispatched this connection creation as a job. Is it possible something was/to be alive and causing this error exception? Thank you.

    ErrorException : socket_set_option(): unable to set socket option [10042]: An unknown, invalid, or unsupported option or level was specified in a getsockopt or setsockopt call. at C:\xampp\htdocs\myproject\myproject\vendor\pda\pheanstalk\src\Socket\SocketSocket.php:39

    37|         $sendTimeout = socket_get_option($this->socket, SOL_SOCKET, SO_SNDTIMEO);
    38|         $receiveTimeout = socket_get_option($this->socket, SOL_SOCKET, SO_RCVTIMEO);
    39|         socket_set_option($this->socket, SOL_TCP, SO_KEEPALIVE, 1);
    40|         socket_set_option($this->socket, SOL_SOCKET, SO_SNDTIMEO, $timeout);
    41|         socket_set_option($this->socket, SOL_SOCKET, SO_RCVTIMEO, $timeout);
    42|         socket_set_block($this->socket);
    

    Exception trace: 1 socket_set_option() C:\xampp\htdocs\myproject\myproject\vendor\pda\pheanstalk\src\Socket\SocketSocket.php:39 2 Pheanstalk\Socket\SocketSocket::__construct("beanstalkedserver") C:\xampp\htdocs\myproject\myproject\vendor\pda\pheanstalk\src\SocketFactory.php:69

    opened by panicoschr 8
  • Is this abnormal DeadlineSoonException what is the cause? Can explain in detail, thank you

    Is this abnormal DeadlineSoonException what is the cause? Can explain in detail, thank you

    PHP Fatal error: Uncaught Pheanstalk\Exception\DeadlineSoonException in /home/Worker/vendor/pda/pheanstalk/src/Command/ReserveCommand.php:25 Stack trace: #0 /home/Worker/vendor/pda/pheanstalk/src/Connection.php(114): Pheanstalk\Command\ReserveCommand->parseResponse('DEADLINE_SOON', NULL) #1 /home/Worker/vendor/pda/pheanstalk/src/Pheanstalk.php(369): Pheanstalk\Connection->dispatchCommand(Object(Pheanstalk\Command\ReserveCommand)) #2 /home/Worker/vendor/pda/pheanstalk/src/Pheanstalk.php(255): Pheanstalk\Pheanstalk->dispatch(Object(Pheanstalk\Command\ReserveCommand)) #3 /home/Worker/app/test/stalk.php(31): Pheanstalk\Pheanstalk->reserve() #4 {main} thrown in /home/Worker/vendor/pda/pheanstalk/src/Command/ReserveCommand.php on line 25

    The test code:

    
    try {
        while (true) {
            $job = $pheanstalk
                ->watch('Order')
                ->ignore('default')
                ->reserve();
    
            $payload = $job->getData();
            if ($job->getId() > 0) {
                print_r($payload . PHP_EOL);
                sleep(2);
                var_dump(json_decode($payload, true));
            }
        }
    } catch (ConnectionException $e) {
        exit("[ ERROR ] => Beanstalk could not connect to the server.\n");
    }
    
    opened by twomiao 8
  • V5

    V5

    This is a major re-implementation using modern code practices:

    • Requires PHP8.1
    • Uses value objects instead of string types in a lot of places
    • Breaks backwards compatibility basically everywhere

    Todo:

    • Docs
    opened by SamMousa 1
  • Split message parsing & generation from communication

    Split message parsing & generation from communication

    Parsing and creation of messages defined in the Beanstalkd protocol should be done in a separate library.

    This way it is reusable for both synchronous clients (https://github.com/pheanstalk/pheanstalk) and asynchronous clients (https://github.com/amphp/beanstalk).

    opened by SamMousa 0
  • Pheanstalk 5

    Pheanstalk 5

    Proposed changes for version 5.

    • [ ] Explicitly exclude new functions in PheanstalkInterface from BC promise, we will however not change signatures.
    • [x] Upgrade minimum PHP to 8.0
    • [x] Add return type hints where possible
    • [x] Add support for reserve-job (#222)
    • [x] Move to github actions (away from Travis)
    • [x] Add a job for static analysis (PHPStan)
    • [x] Add job for code style PSR12

    Please add anything you'd like to see for v5 here.

    opened by SamMousa 9
Releases(v5.0.0-alpha2)
  • v5.0.0-alpha2(May 25, 2022)

    Second alpha release. Documentation still needs significant work, but this code should be working. Test coverage is very high and we have both unit tests as well as integration tests.

    Full Changelog: https://github.com/pheanstalk/pheanstalk/compare/v5.0.0-alpha1...v5.0.0-alpha2

    Source code(tar.gz)
    Source code(zip)
  • v5.0.0-alpha1(Jan 4, 2022)

  • v4.0.1(Jan 24, 2020)

  • v4.0.0(Jan 21, 2019)

    Version 4 of Pheanstalk is a partial rework of the most popular PHP library for Beanstalkd.

    This release removes support for persistent connections and removes functions with side effects like putInTube.

    To be more flexible in deployment Pheanstalk now supports different socket implementations, if possible it will default to using the sockets extension. Advantage of this extension is that it allows us to enable tcp KEEP ALIVE.

    In Pheanstalk one common issue that people ran into was an undetectable connection failure. The consumer would wait infinitely but no new jobs would come in. For a lot of reasons it can be impossible for PHP (or even the underlying OS) to detect that a connection was dropped. For this reason we recommend always:

    • Use reserve with a timeout set to the maximum time you want a dropped connection to go unnoticed.
    • Catch exceptions and re-instantiate Pheanstalk when needed.

    Please test your code thoroughly before deploying version 4 in production. Specifically make sure your code handles exceptions and takes appropriate actions.

    Source code(tar.gz)
    Source code(zip)
  • v4.0.0-alpha.3(Dec 3, 2018)

  • v4.0.0-alpha.2(Nov 2, 2018)

  • v4.0.0-alpha.1(Oct 5, 2018)

  • v3.2.1(Sep 19, 2018)

    This release fixes a bug that could, in certain cases, cause data to be lost from a connection. Due to the way beanstalk reservations work no data is permanently lost and the main effect of this would be a delay in task execution.

    Thanks for pointing out the problem @mialex!

    Source code(tar.gz)
    Source code(zip)
  • v3.2.0(Sep 18, 2018)

    This is a maintenance release.

    One issue that was fixed in this release was the risk of an infinite loop in Connection::getLine(). Now after a timeout, configurable via ini-set('default_socket_timeout', $timeout), the getLine() function will throw an exception to bring it in line with Connection::read() and Connection::write().

    If your worker has to potentially wait a long time for jobs you might start to see exceptions that you did not see before. Even though this behavior is a change it allows you to actually detect errors instead of just waiting forever.

    My worker runs via a supervisor

    If your worker is currently managed by a supervisor (ie, it restarts after it dies), set your socket timeout to a value like 3600. This means that if the worker doesn't get jobs for 12 hours, it will be restarted 12 times, but in return, if the connection is dead the worker will restart after at most 1 hour and resume working.

    My worker does not run via a supervisor

    If a crash of your worker results in manually having to restart it you should really change the configuration. One option that partially resolves this is properly catching errors in reserve(), socket errors are in that sense nothing new, the changes in this version just make them more consistent in certain cases.

    Source code(tar.gz)
    Source code(zip)
  • v3.1.0(Sep 1, 2015)

    Source code(tar.gz)
    Source code(zip)
Owner
null
Message Queue, Job Queue, Broadcasting, WebSockets packages for PHP, Symfony, Laravel, Magento. DEVELOPMENT REPOSITORY - provided by Forma-Pro

Supporting Enqueue Enqueue is an MIT-licensed open source project with its ongoing development made possible entirely by the support of community and

Enqueue 2.1k Dec 22, 2022
PHP bindings for Tarantool Queue.

Tarantool Queue Tarantool is a NoSQL database running in a Lua application server. It integrates Lua modules, called LuaRocks. This package provides P

Tarantool PHP 62 Sep 28, 2022
PHP-Queue: A unified front-end for different queuing backends. Includes a REST server, CLI interface and daemon runners.

A unified front-end for different queuing backends. Includes a REST server, CLI interface and daemon runners. Why PHP-Queue? Implementing a

CoderKungfu 646 Dec 30, 2022
Redis repository implementation for Laravel Queue Batch

Laravel RedisBatchRepository Replaces default Illuminate\Bus\DatabaseBatchRepository with implementation based on Redis. Requirements: php 8 laravel 8

Roman Nix 5 Nov 15, 2022
Laravel Enqueue message queue extension. Supports AMQP, Amazon SQS, Kafka, Google PubSub, Redis, STOMP, Gearman, Beanstalk and others

Laravel queue package You can use all transports built on top of queue-interop including all supported by Enqueue. It also supports extended AMQP feat

Enqueue 204 Dec 22, 2022
RabbitMQ driver for ThinkPHP6 Queue.

RabbitMQ driver for ThinkPHP6 Queue.

null 2 Sep 14, 2022
RabbitMQ driver for Laravel Queue. Supports Laravel Horizon.

RabbitMQ Queue driver for Laravel Support Policy Only the latest version will get new features. Bug fixes will be provided using the following scheme:

Vladimir Yuldashev 1.6k Dec 31, 2022
Karaoke queue website for BEPIC-Fest

BEPIC-Karaoke This is a small project of a karaoke list for the annual BEPIC-Fest at Ulm University. You can add songs, remove them and change the ord

Tim Palm 2 Jun 8, 2022
Laravel Custom Queue System

Laravel Queue 1.1.0 Laravel custom queue system. Installation Use composer: composer require m-alsafadi/laravel-queue Add to .env file: LARAVEL_QUEUE_

Mohammad Al-Safadi 1 Aug 2, 2022
The most widely used PHP client for RabbitMQ

php-amqplib This library is a pure PHP implementation of the AMQP 0-9-1 protocol. It's been tested against RabbitMQ. The library was used for the PHP

php-amqplib 4.2k Jan 6, 2023
Bernard is a multi-backend PHP library for creating background jobs for later processing.

Bernard makes it super easy and enjoyable to do background processing in PHP. It does this by utilizing queues and long running processes. It supports

Bernard 1.2k Jan 2, 2023
Performant pure-PHP AMQP (RabbitMQ) sync/async (ReactPHP) library

BunnyPHP Performant pure-PHP AMQP (RabbitMQ) sync/async (ReactPHP) library Requirements BunnyPHP requires PHP 7.1 and newer. Installation Add as Compo

Jakub Kulhan 641 Dec 29, 2022
PHP Library that implements several messaging patterns for RabbitMQ

Thumper Thumper is a PHP library that aims to abstract several messaging patterns that can be implemented over RabbitMQ. Inside the examples folder yo

php-amqplib 276 Nov 20, 2022
PHP client for beanstalkd queue

Pheanstalk Pheanstalk is a pure PHP 7.1+ client for the beanstalkd workqueue. It has been actively developed, and used in production by many, since la

null 1.9k Dec 21, 2022
Message Queue, Job Queue, Broadcasting, WebSockets packages for PHP, Symfony, Laravel, Magento. DEVELOPMENT REPOSITORY - provided by Forma-Pro

Supporting Enqueue Enqueue is an MIT-licensed open source project with its ongoing development made possible entirely by the support of community and

Enqueue 2.1k Dec 22, 2022
Job Queue Public API PHP Client

Job Queue API PHP Client PHP client for the Job Queue API (API docs). Usage composer require keboola/job-queue-api-php-client use Keboola\JobQueueClie

Keboola 0 Dec 20, 2021
PHP bindings for Tarantool Queue.

Tarantool Queue Tarantool is a NoSQL database running in a Lua application server. It integrates Lua modules, called LuaRocks. This package provides P

Tarantool PHP 62 Sep 28, 2022
🐺 Asynchronous Task Queue Based on Distributed Message Passing for PHP.

?? Asynchronous Task Queue Based on Distributed Message Passing for PHP.

Ahmed 36 Aug 11, 2022
Use php-fpm as a simple built-in async queue

PHP-FPM Async Queue Use php-fpm as a simple built-in async queue. Based on interoperable queue interfaces Queue Interop. Usage composer makasim/php-fp

Max Kotliar 111 Nov 19, 2022
PHP-Queue: A unified front-end for different queuing backends. Includes a REST server, CLI interface and daemon runners.

A unified front-end for different queuing backends. Includes a REST server, CLI interface and daemon runners. Why PHP-Queue? Implementing a

CoderKungfu 646 Dec 30, 2022