mookofe / tail by mookofe

RabbitMQ and PHP client for Laravel and Lumen that allows you to add and listen queues messages just simple
50,147
54
4
Package Data
Maintainer Username: mookofe
Maintainer Contact: cruzrosario@gmail.com (Victor Cruz)
Package Create Date: 2015-03-09
Package Last Update: 2019-09-09
Home Page:
Language: PHP
License: MIT
Last Refreshed: 2024-11-14 15:11:37
Package Statistics
Total Downloads: 50,147
Monthly Downloads: 165
Daily Downloads: 8
Total Stars: 54
Total Watchers: 4
Total Forks: 21
Total Open Issues: 15

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