This library is based on the smskin/laravel-daemon-supervisor and https://packagist.org/packages/php-amqplib/php-amqplib libraries.
The library allows you to configure, listen to RabbitMQ queues, and send messages to the broker's exchange.
composer required smskin/laravel-rabbitmq
php artisan vendor:publish --provider="SMSkin\LaravelRabbitMq\Providers\ServiceProvider"
Settings are located in the config/rabbitmq.php
file.
RabbitMQ connection settings.
Settings for distributing messages across incoming message handler processes.
strategy
- sharding strategy.
Available strategies:
- ONE_SHARD - one process listens to all messages
- EVERY_CONSUMER - each consumer has a separate process
- MAX_LIMIT - launches
max_shards
processes, messages are distributed evenly among them
Registration of RabbitMQ exchanges.
Registration of bindings between Exchanges.
Registration of queues.
Registration of bindings from Exchanges to queues.
Registration of incoming message handlers.
Class inherits from SMSkin\LaravelRabbitMq\Entities\Exchange
.
Allows routing messages from one exchange to others.
Class inherits from SMSkin\LaravelRabbitMq\Entities\Binding
.
Refer to the base class for configuration rules as per AMQP documentation.
Methods to implement:
public function getSource(): string
- Returns the source Exchange name.public function getDestination(): string
- Returns the destination Exchange name.
Refer to the base class for configuration rules as per AMQP documentation.
Class inherits from SMSkin\LaravelRabbitMq\Entities\Queue
.
Refer to the base class for configuration rules as per AMQP documentation.
Class inherits from SMSkin\LaravelRabbitMq\Entities\Binding
.
Allows routing messages from an Exchange to a queue.
Methods to implement:
public function getSource(): string
- Returns the source Exchange name.public function getDestination(): string
- Returns the destination Queue name.
Refer to the base class for configuration rules as per AMQP documentation.
Incoming message handler. Class inherits from SMSkin\LaravelRabbitMq\Entities\Consumer
.
Methods to implement:
-
public function getQueue(): string
- Returns the name of the queue this handler listens to. -
public function handleMessage(AMQPMessage $message): void
- Handles the message. -
The
handleMessage(AMQPMessage $message)
method should end with marking the message as processed ($message->ack();
).
Aim for the handleMessage(AMQPMessage $message)
method to execute in minimal time to avoid becoming a bottleneck in queue processing.
This library includes 2 artisan commands:
rmq:supervisor
- Master processrmq:worker
- Worker process
When running rmq:supervisor
, the library configures RabbitMQ according to the configuration file and starts worker processes based on the selected strategy (rabbitmq.sharding.strategy
).
When a message appears in the listening queue, the handleMessage(AMQPMessage $message)
method of the subscribed handler is triggered.
Add the command php artisan rmq:supervisor
to your supervisor configuration.
Upon starting, supervisor will launch the master process.
[program:laravel-rmq-supervisor]
process_name=%(program_name)s
command=php /var/www/html/artisan rmq:supervisor
autostart=true
autorestart=true
user=www-data
group=www-data
redirect_stderr=true
stdout_logfile=/dev/stdout
stderr_logfile=/dev/stderr
stdout_maxbytes=0
stderr_maxbytes=0
stdout_logfile_maxbytes = 0
stderr_logfile_maxbytes = 0
startsecs=0
stopwaitsecs=3600