usmonaliyev / laravel-simple-rabbitmq
This package provides simple usage of rabbitmq.
Requires
- php: ^8.1
- illuminate/console: *
- illuminate/support: *
- php-amqplib/php-amqplib: ^3.7
Requires (Dev)
- laravel/pint: ^1.18
- pestphp/pest: ^1.23
- phpunit/phpunit: ^9.0
- symfony/var-dumper: ^6.4
README
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 isamqp: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']) ->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.
Contracts
We have a telegram group, you can join use.![](https://github.com/usmonaliyev99/usmonaliyev99/raw/main/assets/have-you-joined-us.gif?raw=true)
Plans
- Exchange configuration in
config/simple-mq.php
- Setup testing.
Testing
composer test
License
The MIT License.