Skip to content

madewithlove/laravel-simple-rabbitmq

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

55 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

laravel-simple-rabbitmq

The package for simplified RabbitMQ usage, supporting multiple connections, easy publishing, and consumer mode.

Documentation

Key Features

  • Multiple Connections: Effortlessly manage multiple RabbitMQ connections within the same application.

  • Exchange supporting: You can push messages to exchanges

  • Message Publishing: Easily publish messages to queues and exchange with a fluent, chainable syntax.

  • Consumer Mode: Enable consumers to receive and process messages from queues in real time.

  • Manage queues and exchanges in config file: You can register queues and exchanges in config/simple-mq.php and define them in easy way which is amqp:define-queues command.

Installation

You can install the package via composer:

composer require usmonaliyev/laravel-simple-rabbitmq

Next step you must publish config and action register files:

php artisan vendor:publish --provider="Usmonaliyev\SimpleRabbit\SimpleRabbitMQServiceProvider"

As a result of this command, you will have a configuration file config/simple-mq.php and a registry file routes/amqp-handlers.php.

The config/simple-mq.php config file contains RabbitMQ connections with credentials, queues, default connection and default queue.

The next stage is configure .env file.

SIMPLE_MQ_CONNECTION=
SIMPLE_MQ_QUEUE=

SIMPLE_MQ_HOST=
SIMPLE_MQ_PORT=
SIMPLE_MQ_USERNAME=
SIMPLE_MQ_PASSWORD=

Usage

The package can publish and consume messages

Publishing

You can publish a message with default connection and default queue:

<?php

use Illuminate\Http\Request;
use Usmonaliyev\SimpleRabbit\Facades\SimpleMQ;

class FooController
{
    public function createFoo(Request $request)
    {
        // Something..
        
        SimpleMQ::queue('foo-queue')
          ->setBody(['name' => 'First Foo'])
          ->handler('create-foo')
          ->publish();
          
        return response()->json(['message' => 'OK']);
    }
}

Also, exchange function publish message to RabbitMq exchange:

<?php

namespace App\Https\Controllers;

use Illuminate\Http\Request;
use Usmonaliyev\SimpleRabbit\Facades\SimpleMQ;

class FooController
{
    public function createFoo(Request $request)
    {
        // Something..
        
        SimpleMQ::exchange('foo-exchange')
          ->setBody(['name' => 'First Foo'])
          ->setRoutingKey('foo.bar')
          ->handler('create-foo')
          ->publish();
          
        return response()->json(['message' => 'OK']);
    }
}

If you have multiply connection to RabbitMq, you can publish a message with connection method.

<?php

namespace App\Https\Controllers;

use Illuminate\Http\Request;
use Usmonaliyev\SimpleRabbit\Facades\SimpleMQ;

class FooController
{
    public function createFoo(Request $request)
    {
        // Something..
        
        SimpleMQ::connection('foo-connection')
          ->queue('foo-queue')
          ->setBody(['name' => 'First Foo'])
          ->handler('create-foo')
          ->publish();
          
        return response()->json(['message' => 'OK']);
    }
}

Consuming

Create app/AMQP/Handlers folder and create your handler classes.

For example:

<?php

namespace App\AMQP\Handlers;

use Usmonaliyev\SimpleRabbit\MQ\Message;

class FooHandler
{
    public function handle(Message $message)
    {
        // do something...
        
        $message->ack();
        
        return ['ok' => true];
    }
}

Don't forget acknowledge message end of process, else consumer does not accept next message.

Then register your handler in routes/amqp-handlers.php file.

<?php

use \App\AMQP\Handlers\FooHandler;
use \Usmonaliyev\SimpleRabbit\Facades\ActionMQ;

ActionMQ::register('create-foo', [FooHandler::class, 'handle']);

To consume messages use:

php artisan amqp:consume connection? queue?

The command requires two arguments which are connection and queue.
If you don't give them, command uses default connection and queue.

Plans

  • Exchange configuration in config/simple-mq.php
  • Setup testing.

Testing

composer test

License

The MIT License.

About

This package provides simple usage of rabbitmq.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • PHP 100.0%