xobotyi / beansclient

Robust PHP client for beanstalkd work queue
MIT License
91 stars 10 forks source link
beanstalk beanstalkd client php queue
# beansclient [![NPM Version](https://flat.badgen.net/packagist/v/xobotyi/beansclient)](https://packagist.org/packages/xobotyi/beansclient) [![NPM Downloads](https://flat.badgen.net/packagist/dt/xobotyi/beansclient)](https://packagist.org/packages/xobotyi/beansclient) [![NPM Dependents](https://flat.badgen.net/packagist/dependents/xobotyi/beansclient)](https://packagist.org/packages/xobotyi/beansclient) [![Build](https://img.shields.io/github/workflow/status/xobotyi/beansclient/CI?style=flat-square)](https://github.com/xobotyi/beansclient/actions) [![Coverage](https://flat.badgen.net/codecov/c/github/xobotyi/beansclient)](https://app.codecov.io/gh/xobotyi/beansclient) [![NPM Dependents](https://flat.badgen.net/packagist/php/xobotyi/beansclient)](https://packagist.org/packages/xobotyi/beansclient) [![NPM Dependents](https://flat.badgen.net/packagist/license/xobotyi/beansclient)](https://packagist.org/packages/xobotyi/beansclient)

About

BeansClient is a PHP8 client for beanstalkd work queue with thorough unit-testing. Library uses PSR-4 autoloader standard and always has 100% tests coverage.
Library gives you a simple way to provide your own Socket implementation, in cases when you need to log requests and responses or to proxy traffic to non-standard transport.

BeansClient supports whole bunch of commands and responses specified in protocol for version 1.12

Why BeansClient?

  1. Well tested.
  2. Supports UNIX sockets.
  3. Actively maintained.
  4. Predictable (does not throw exception in any situation, hello pheanstalk🤪).
  5. PHP8 support.

Contents

  1. Requirements
  2. Installation
  3. Usage
  4. Docs
    • TBD

Requirements

Installation

Install with composer

composer require xobotyi/beansclient

Usage

<?php
use xobotyi\beansclient\Beanstalkd;
use xobotyi\beansclient\Client;
use xobotyi\beansclient\Socket\SocketsSocket;

$sock   = new SocketsSocket(host: 'localhost', port: 11300, connectionTimeout: 2);
$client = new Client(socket: $sock, defaultTube: 'myAwesomeTube');

##            ##
#   PRODUCER   #
##            ##

$job = $client->put("job's payload", delay: 2);
if($job['state'] === Beanstalkd::JOB_STATE_DELAYED) {
  echo "Job {$job['id']} is ready to be reserved within 2 seconds\n";
}

##            ##
#    WORKER    #
##            ##

$client->watchTube('myAwesomeTube2');

$job = $client->reserve();

if ($job) {
    echo "Hey, i received first {$job['payload']} of job with id {$job['id']}\n";

    $client->delete($job['id']);

    echo "And i've done it!\n";
}
else {
    echo "So sad, i have nothing to do";
}

echo "Am I still connected? \n" . ($client->socket()->isConnected() ? 'Yes' : 'No') . "\n";