iamfarhad / laravel-rabbitmq
the best laravel rabbitmq package
Fund package maintenance!
iamfarhad
Installs: 3 981
Dependents: 0
Suggesters: 0
Security: 0
Stars: 15
Watchers: 2
Forks: 1
Open Issues: 4
Requires
- php: ^8.1
- ext-pcntl: *
- illuminate/queue: ^9.0|^10.0
- illuminate/support: ^9.18|^10.0
- php-amqplib/php-amqplib: ^3.6.0
Requires (Dev)
- ext-json: *
- dg/bypass-finals: dev-master
- mockery/mockery: ^1.7.0
- orchestra/testbench: ^v7.18.0
- phpunit/phpunit: ^9.6|^10.0.7
- rector/rector: ^0.15.25
- squizlabs/php_codesniffer: ^3
README
The connection abstracts the socket connection, and takes care of protocol version negotiation and authentication and so on for us. Here we connect to a RabbitMQ node on the local machine - hence the localhost. If we wanted to connect to a node on a different machine or to a host hosting a proxy recommended for PHP clients, we'd simply specify its hostname or IP address here.
Support Policy
Only the latest version will get new features. Bug fixes will be provided using the following scheme:
this is experimental version of the package
Installation
You can install this package via composer using this command:
composer require iamfarhad/laravel-rabbitmq
The package will automatically register itself.
Add connection to config/queue.php:
'connections' => [ // ..... 'rabbitmq' => [ 'driver' => 'rabbitmq', 'queue' => env('RABBITMQ_QUEUE', 'default'), 'hosts' => [ 'host' => env('RABBITMQ_HOST', '127.0.0.1'), 'port' => env('RABBITMQ_PORT', 5672), 'user' => env('RABBITMQ_USER', 'guest'), 'password' => env('RABBITMQ_PASSWORD', 'guest'), 'vhost' => env('RABBITMQ_VHOST', '/'), 'lazy' => env('RABBITMQ_LAZY_CONNECTION', true), 'keepalive' => env('RABBITMQ_KEEPALIVE_CONNECTION', false), 'heartbeat' => env('RABBITMQ_HEARTBEAT_CONNECTION', 0), ], 'options' => [ 'ssl_options' => [ 'cafile' => env('RABBITMQ_SSL_CAFILE', null), 'local_cert' => env('RABBITMQ_SSL_LOCALCERT', null), 'local_key' => env('RABBITMQ_SSL_LOCALKEY', null), 'verify_peer' => env('RABBITMQ_SSL_VERIFY_PEER', true), 'passphrase' => env('RABBITMQ_SSL_PASSPHRASE', null), ], 'queue' => [ 'job' => \iamfarhad\LaravelRabbitMQ\Jobs\RabbitMQJob::class, ], ], ] ]
Laravel Usage
Once you completed the configuration you can use Laravel Queue API. If you used other queue drivers you do not need to change anything else. If you do not know how to use Queue API, please refer to the official Laravel documentation: http://laravel.com/docs/queues
Lumen Usage
For Lumen usage the service provider should be registered manually as follows in bootstrap/app.php
:
$app->register(iamfarhad\LaravelRabbitMQ\LaravelRabbitQueueServiceProvider::class);
Consuming Messages
There are two ways of consuming messages.
-
queue:work
command which is Laravel's built-in command. This command utilizesbasic_get
. -
rabbitmq:consume
command which is provided by this package. This command utilizesbasic_consume
and is more performant thanbasic_get
by ~3x.
php artisan rabbitmq:consume --queue=customQueue
You can create jobs with custom queue same as below
class TestJob implements ShouldQueue { use Dispatchable; use InteractsWithQueue; use Queueable; use SerializesModels; public function __construct() { $this->onQueue('customQueue'); } public function handle() { return true; } }
Queues and Exchanges will be created automatically