/bernard-laravel

Bindings for Laravel

Primary LanguagePHP

Bernard for Laravel

Build Status

Brings Bernard to Laravel. Laravel already has a great queue.. That's right, but it only works with Laravel. If your project/company utilizes multiple frameworks, Bernard provides leverage.

Getting started

Extend composer.json file:

{
    "require": {
        "bernard/laravel": "@dev"
    }
}

Register the service provider in app/config/app.php:

<?php
// ...
'providers' => array(
    // ..

    'Bernard\Laravel\BernardServiceProvider'

    // ..
)

Choose Driver

Now you need to choose the Driver you want to use. Initialize the default config file with artisan:

$ php artisan config:publish bernard/laravel

This creates the file app/config/packages/bernard/laravel/config.php.

Redis

Config in app/config/packages/bernard/laravel/config.php

<?php

return array(
    'driver' => 'predis',
);

Setup predis in IoC:

<?php

App::singleton('predis', function () {
    return new \Predis\Client(null, array(
        'prefix' => 'bernard:'
    ));
});

Requires the predis/predis composer package.

SQS

Config in app/config/packages/bernard/laravel/config.php

<?php

return array(
    'driver' => 'sqs',

    // optional: use prefetching for efficiency
    //'prefetch' => 10,

    // optional: pre-set queue name -> url mappings
    //'queue_urls' => array('some-queue' => 'https://sqs.eu-west-1.amazonaws.com/123123/some-queue', ...)
);

Setup sqs in IoC:

<?php

use Aws\Sqs\SqsClient;

// ...

App::singleton('sqs', function () {
    return SqsClient::factory(array(
       'key'    => 'Your AWS Access Key',
       'secret' => 'Your AWS Secret Key',
       'region' => 'Your AWS Region'
   ));
});

Requires the aws/aws-sdk-php composer package.

Iron MQ

Config in app/config/packages/bernard/laravel/config.php

<?php

return array(
    'driver' => 'iron_mq',

    // use prefetching for efficiency
    //'prefetch' => 10
);

Setup iron_mq in IoC:

<?php

App::singleton('iron_mq', function () {
    return new \IronMq(array(
        'token'      => 'Your IronMQ Token',
        'project_id' => 'Your IronMQ Project ID',
    ));
});

Eloquent

For small projects or testing.

Config in app/config/packages/bernard/laravel/config.php

<?php

return array(
    'driver' => 'eloquent',
);

You also need to migrate the required tables (once):

$ php artisan migrate --package=bernard/laravel

Usage

In Laravel without Facades

In your Laravel app, add a new message to the queue:

<?php

$this->app['bernard:producer']->produce(new \Bernard\Message\DefaultMessage('MyService', array(
    'my' => 'args',
)));

In Laravel with Facades

Add the two aliases in your app/config/app.php config file like so:

<?php

return array(
    // ..
    'aliases' => array(
        // ..
        'Producer' => 'Bernard\Laravel\Facades\Producer',
        'Consumer' => 'Bernard\Laravel\Facades\Consumer',
    ),
);

And now you can use them as any other Facade in Laravel:

<?php

Producer::message('MyService', array('my' => 'args'));

From command line

# create a new message
$ php artisan bernard:produce MyService '{"json":"data"}'

# consume messages
$ php artisan bernard:consume my-service