beanstalkd-consumer

Small library for writing command line beanstalkd consumers

1 year after

Equip Beanstalkd Consumer

Latest Stable Version License Build Status Code Coverage Scrutinizer Code Quality

A small library for writing command line beanstalkd consumers in Equip applications.

Installation

Use Composer.

composer require equip/beanstalkd-consumer

Writing Consumers

A consumer is a PHP class that implements ConsumerInterface to process jobs received from beanstalkd, each of which is represented by an instance of the Job class.

Here's an example of a consumer implementation.

namespace Acme;

use Equip\BeanstalkConsumer\ConsumerInterface;
use Equip\BeanstalkConsumer\Job;

class FooConsumer implements ConsumerInterface
{
    public function consume(Job $job)
    {
        $id = $job->getId();
        $data = $job->getData();

        // unserialize and process $data here
    }
}

Using Consumers

To use the consumer shown in the last section, be sure its namespace is included in your Composer autoloader, then invoke the runner as shown in the examples below.

If this library is installed as a project dependency:

BEANSTALKD_CONSUMER="Acme\\FooConsumer" ./vendor/bin/beanstalkd-consumer

If this library is installed as a repository clone:

BEANSTALKD_CONSUMER="Acme\\FooConsumer" ./bin/beanstalkd-consumer

Configuration

These environmental variables may be used to configure the runner.

  • BEANSTALKD_CONSUMER - fully-qualified name of a PHP class implementing ConsumerInterface to consume jobs
  • BEANSTALKD_HOST - hostname of the beanstalkd server, defaults to '127.0.0.1'
  • BEANSTALKD_PORT - port on which the beanstalkd server listens, defaults to 11300
  • BEANSTALKD_TUBE - tube from which the consumer should consume jobs, defaults to 'default'

Consumer Dependencies

By default, Auryn is used internally as a resolver to create consumer instances. As such, with some additional code, it can be used to inject dependencies into consumers as well.

In order to apply any additional configurations needed for consumers to the Auryn Injector instance in use, a custom runner must be written. It will likely look familiar similar to the stock runner except that, in addition to the DefaultConfigurationSet class that establishes a basic level of configuration for the runner, it will also apply any configurations that consumers require. This can be done using a subclass of ConfigurationSet as shown in the example below.

namespace Acme;

use Equip\BeanstalkdConsumer\Configuration\DefaultConfigurationSet;
use Equip\Configuration\ConfigurationSet;

class Configuration extends ConfigurationSet
{
    public function __construct()
    {
        parent::__construct([
            DefaultConfigurationSet::class,
            FooConfiguration::class,
            BarConfiguration::class,
            // etc.
        ]);
    }
}

The only needed difference between the stock and custom runners would be that the class shown above is used instead of DefaultConfigurationSet when configuring the Auryn Injector instance.

Related Repositories

forum

forum

Phalcon official Forum ...

beanstalk

beanstalk

Minimalistic PHP client for beanstalkd. ...

gobeanstalk

gobeanstalk

Go Beanstalkd Client Library ...

beanstalk

beanstalk

Clojure Beanstalk Client ...

rust-beanstalkd

rust-beanstalkd

Easy-to-use beanstalkd client for Rust (IronMQ compatible) ...