这里是一个简单的 Laravel 和 RabbitMQ 实例。
首先,你需要安装 RabbitMQ 扩展。可以使用 composer 安装 php-amqplib/php-amqplib
:
composer require php-amqplib/php-amqplib
然后,你需要在 Laravel 中添加 RabbitMQ 配置。在 config
目录下创建一个名为 rabbitmq.php
的文件:
return [
'host' => env('RABBITMQ_HOST', 'localhost'),
'port' => env('RABBITMQ_PORT', 5672),
'username' => env('RABBITMQ_USERNAME', 'guest'),
'password' => env('RABBITMQ_PASSWORD', 'guest'),
'queue' => env('RABBITMQ_QUEUE', 'default'),
];
接下来,你需要创建一个 RabbitMQ 生产者和消费者。在 Laravel 中,可以使用 php artisan make:job
命令创建一个队列任务:
php artisan make:job SendMessageJob
在 app/Jobs/SendMessageJob.php
文件中,编写发送消息的代码:
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
class SendMessageJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $message;
public function __construct($message)
{
$this->message = $message;
}
public function handle()
{
$connection = new AMQPStreamConnection(config('rabbitmq.host'), config('rabbitmq.port'), config('rabbitmq.username'), config('rabbitmq.password'));
$channel = $connection->channel();
$channel->queue_declare(config('rabbitmq.queue'), false, true, false, false);
$msg = new AMQPMessage($this->message);
$channel->basic_publish($msg, '', config('rabbitmq.queue'));
$channel->close();
$connection->close();
}
}
这个任务的作用是将消息发送到 RabbitMQ 队列中。
接下来,你需要创建一个消费者监听该队列。在 Laravel 中,可以使用 php artisan make:command
命令创建一个 Artisan 命令:
php artisan make:command ListenMessageCommand
在 app/Console/Commands/ListenMessageCommand.php
文件中,编写监听队列的代码:
use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;
class ListenMessageCommand extends Command
{
protected $signature = 'listen:message';
protected $description = 'Listen message from RabbitMQ';
public function handle()
{
$connection = new AMQPStreamConnection(config('rabbitmq.host'), config('rabbitmq.port'), config('rabbitmq.username'), config('rabbitmq.password'));
$channel = $connection->channel();
$channel->queue_declare(config('rabbitmq.queue'), false, true, false, false);
$callback = function ($msg) {
$this->info('Received: ' . $msg->body);
$msg->delivery_info['channel']->basic_ack($msg->delivery_info['delivery_tag']);
};
$channel->basic_qos(null, 1, null);
$channel->basic_consume(config('rabbitmq.queue'), '', false, false, false, false, $callback);
while (count($channel->callbacks)) {
$channel->wait();
}
$channel->close();
$connection->close();
}
}
这个命令的作用是监听 RabbitMQ 队列并打印消息。
接下来,你就可以使用 Laravel Artisan 命令来发送和监听消息了:
php artisan queue:work # 启动默认队列消费者
php artisan listen:message # 启动 RabbitMQ 队列消费者
php artisan queue:work --queue=queue_name # 启动指定队列消费者
php artisan queue:work --tries=3 # 设置队列任务尝试次数
php artisan queue:work --timeout=60 # 设置队列任务超时时间
php artisan queue:work --sleep=10 # 设置队列任务运行休息时间
这就是一个简单的 Laravel 和 RabbitMQ 实例。