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.
Only the latest version will get new features. Bug fixes will be provided using the following scheme:
Package Version | Laravel Version | PHP Version | Bug Fixes Until | |
---|---|---|---|---|
0 | 9, 10 | ^8.1 | August 26th, 2023 | Documentation |
this is experimental version of the package
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,
],
],
]
]
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
For Lumen usage the service provider should be registered manually as follows in bootstrap/app.php
:
$app->register(iamfarhad\LaravelRabbitMQ\LaravelRabbitQueueServiceProvider::class);
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