1. 首先安装 PHP 扩展 amqp
2.Docker 安装 RabbitMq 将以下内容追加到 docker-compose.yml
rabbitmq:
container_name: xb_rabbitmq # 容器名称
image: rabbitmq:management # 镜像
networks:
- wb_net
ports:
- 15673:15672
- 5673:5672
volumes:
- './storage/rabbitmq:/var/lib/rabbitmq' # 映射目录
3.重新构建镜像
docker-compose up -d
4.RabbitMq 后台地址 账号密码:guest
以上完成 RabbitMq 前提工作
5.安装
composer require vladimir-yuldashev/laravel-queue-rabbitmq
6.config/queue.php文件在connections中追加
'rabbitmq' => [
'driver' => 'rabbitmq',
'queue' => env('RABBITMQ_QUEUE', 'default'),
'connection' => PhpAmqpLib\Connection\AMQPLazyConnection::class,
'hosts' => [
[
'host' => env('RABBITMQ_HOST', '192.168.159.166'),
'port' => env('RABBITMQ_PORT', 15672),
'user' => env('RABBITMQ_USER', 'admin'),
'password' => env('RABBITMQ_PASSWORD', 'admin'),
'vhost' => env('RABBITMQ_VHOST', '/'),
],
],
'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),
],
],
/*
* Set to "horizon" if you wish to use Laravel Horizon.
*/
'worker' => env('RABBITMQ_WORKER', 'default'),
],
7. env 追加配置 后 执行 php artisan config:cache
QUEUE_CONNECTION=rabbitmq # 更改
RABBITMQ_HOST=xb_rabbitmq # 容器名称
RABBITMQ_PORT=5672
#通过15672创建的rabbitmq虚拟主机,默认是'/'
RABBITMQ_VHOST=/
RABBITMQ_USER=guest
RABBITMQ_PASSWORD=guest
#通过15672创建的rabbitmq队列
RABBITMQ_QUEUE=rebbitmq
8.创建 job:php artisan make:job Queue
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
class Queue implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
/**
* Create a new job instance.
*
* @return void
*/
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
Log::info('mq-执行end');
}
}
9.监听队列
php artisan queue:work
10.创建控制器:php artisan make:controller QueueController
<?php
namespace App\Http\Controllers;
use App\Jobs\Queue;
class QueueController extends Controller
{
public function mq()
{
Queue::dispatch();
}
}
11.写入路由并访问此Api
Route::get('mq', [\App\Http\Controllers\QueueController::class,'mq']);