mookofe/tail
RabbitMQ and PHP client for Laravel and Lumen that allows you to add and listen queues messages just simple., (*1)
, (*2)
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, (*3)
Installation
Preparation, (*4)
Open your composer.json file and add the following to the require array:, (*5)
"mookofe/tail": "1.*"
Install dependencies, (*6)
$ composer install
Or, (*7)
$ composer update
Integration
Laravel
After installing the package, open your Laravel config file config/app.php and add the following lines., (*8)
In the $providers array add the following service provider for this package., (*9)
Mookofe\Tail\ServiceProvider::class,
In the $aliases array add the following facade for this package., (*10)
'Tail' => Mookofe\Tail\Facades\Tail::class,
Add servers connection file running:, (*11)
$ php artisan vendor:publish --provider="Mookofe\Tail\ServiceProvider" --tag="config"
Lumen
Register the Lumen Service Provider in bootstrap/app.php:, (*12)
/*
|--------------------------------------------------------------------------
| 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, (*13)
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., (*14)
RabbitMQ Connections
By default the library will use the RabbitMQ installation credentials (on a fresh installation the user "guest" is created with password "guest")., (*15)
To override the default connection or add more servers, edit the RabbitMQ connections file at: config/tail-settings.php, (*16)
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, (*17)
Tail::add('queue-name', 'message');
Adding message changing RabbitMQ server, (*18)
Tail::add('queue-name', 'message', array('connection_name' => 'connection_name_config_file'));
Adding message with different exchange, (*19)
Tail::add('queue-name', 'message', array('exchange' => 'exchange_name'));
Adding message with different content type, (*20)
Tail::add('queue-name', '{ 'message' : 'message' }', array('content_type' => 'application/json'));
Adding message with different options, (*21)
$options = array (
'connection_name' => 'connection_name_config_file',
'exchange' => 'exchange_name',
'vhost' => 'vhost'
);
Tail::add('queue-name', 'message', $options);
Using Tail object, (*22)
$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, (*23)
Tail::listen('queue-name', function ($message) {
//Your message logic code
});
Closure listener with options, (*24)
$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:, (*25)
| 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., (*26)
License
This package is open-sourced software licensed under the MIT license, (*27)