/tail

RabbitMQ and PHP client for Laravel that allows you to add and listen queues messages just simple.

Primary LanguagePHPMIT LicenseMIT

mookofe/tail

RabbitMQ and PHP client for Laravel and Lumen that allows you to add and listen queues messages just simple.

Build Status Latest Stable Version License

Features

  • Simple queue configuration
  • Multiple server connections
  • Add message to queues easily
  • Listen queues with useful options

Requirements

  • php-amqplib/php-amqplib: 2.*

Version

1.0.5

Installation

Preparation

Open your composer.json file and add the following to the require array:

"mookofe/tail": "1.*"

Install dependencies

$ composer install

Or

$ composer update

Integration

Laravel

After installing the package, open your Laravel config file config/app.php and add the following lines.

In the $providers array add the following service provider for this package.

Mookofe\Tail\ServiceProvider::class,

In the $aliases array add the following facade for this package.

'Tail' => Mookofe\Tail\Facades\Tail::class,

Add servers connection file running:

$ php artisan vendor:publish --provider="Mookofe\Tail\ServiceProvider" --tag="config"

Lumen

Register the Lumen Service Provider in bootstrap/app.php:

/*
|--------------------------------------------------------------------------
| Register Service Providers
|--------------------------------------------------------------------------
*/

//...

$app->configure('tail-settings');
$app->register(Mookofe\Tail\LumenServiceProvider::class);

//...

Make sure sure $app->withFacades(); is uncomment in your bootstrap/app.php file

Create a config folder in the root directory of your Lumen application and copy the content from vendor/mookofe/tail/config/tail.php to config/tail-settings.php.

RabbitMQ Connections

By default the library will use the RabbitMQ installation credentials (on a fresh installation the user "guest" is created with password "guest").

To override the default connection or add more servers, edit the RabbitMQ connections file at: config/tail-settings.php

return array(

    'default' => 'default_connection',

    'connections' => array(

        'default_connection' => array(
            'host'                => 'localhost',
            'port'                => 5672,
            'username'            => 'guest',
            'password'            => 'guest',
            'vhost'               => '/',
            'ssl_context_options' => null,
            'connection_timeout'  => 3,
            'read_write_timeout'  => 50,   //should be at least 2x heartbeat (if using heartbeat)
            'keepalive'           => true, //requires php-amqplib v2.4.1+
            'heartbeat'           => 25,   //requires php-amqplib v2.4.1+
            'exchange'            => 'default_exchange_name',
            'consumer_tag'        => 'consumer',
            'exchange_type'       => 'direct',
            'content_type'        => 'text/plain'
        ),    
        'other_server' => array(
            'host'                => '192.168.0.10',
            'port'                => 5672,
            'username'            => 'guest',
            'password'            => 'guest',
            'vhost'               => '/',
            'ssl_context_options' => array(
                'capath'      => '/etc/ssl/certs',
                'cafile'      => './startssl_ca.pem',
                'verify_peer' => true,
            ),
            'connection_timeout'  => 3.0,
            'read_write_timeout'  => 3.0,
            'keepalive'           => false,
            'heartbeat'           => 0,
            'exchange'            => 'default_exchange_name',
            'consumer_tag'        => 'consumer',
            'exchange_type'       => 'fanout',
            'content_type'        => 'application/json'
        ),
    ),
);

Adding messages to queue:

Adding a simple message

    Tail::add('queue-name', 'message');

Adding message changing RabbitMQ server

    Tail::add('queue-name', 'message', array('connection_name' => 'connection_name_config_file'));

Adding message with different exchange

    Tail::add('queue-name', 'message', array('exchange' => 'exchange_name'));

Adding message with different content type

    Tail::add('queue-name', '{ 'message' : 'message' }', array('content_type' => 'application/json'));

Adding message with different options

	$options = array (
		'connection_name' => 'connection_name_config_file',
		'exchange' => 'exchange_name',
		'vhost' => 'vhost'
	);	
	
    Tail::add('queue-name', 'message', $options);

Using Tail object

	$message = new Tail::createMessage;
	$message->queue_name = 'queue-name';
	$message->message = 'message';
	$message->connection_name = 'connection_name_in_config_file';
	$message->exchange = 'exchange_name';
	$message->vhost = 'vhost';
	$message->content_type = 'content/type'

	$message->save();

Listening queues:

Closure based listener

Tail::listen('queue-name', function ($message) {
    		
	//Your message logic code
});

Closure listener with options

$options = array(
	'message_limit' => 50,
	'time' => 60,
	'empty_queue_timeout' => 5,
	'connection_name' => 'connection_name_in_config_file',
    'exchange' => 'exchange_name',
    'vhost' => 'vhost'
);

Tail::listenWithOptions('queue-name', $options, function ($message) {
    		
	//Your message logic code		
});

Options definitions:

Name Description Default value
queue_name Queue name on RabbitMQ * Required
message_limit Number of messages to be processed 0: Unlimited
time Time in seconds the process will be running 0: Unlimited
empty_queue_timeout Time in seconds to kill listening when the queue is empty 0: Unlimited
connection_name Server connection name Defined at connections file
exchange Exchange name on RabbitMQ Server Specified on connections file
vhost Virtual host on RabbitMQ Server Specified on connections file

By default the listen process will be running forever unless you specify one of the running time arguments above (message_limit, time, empty_queue_timeout). They can be mixed all together, so when one of the condition is met the process will be stopped.

License

This package is open-sourced software licensed under the MIT license