安装 Rabbit MQ
首先要去rabbitmq官网中下载他的安装包,这里我下载的是3.11.15 windows下载地址
先别安装!要想安装他,必须要安装一个erlang (Downloads - Erlang/OTP) 进去以后先点击
默认是64位的,右边的小三角可以选择32位系统!
这个安装好以后,就按照步骤选择安装路径,这里我们安装到了D:work/mq中
然后再命令行输入erl,如果出现这个,就说明安装成功!
如果是未识别该命令,那么可能就是你的环境变量没有自动配置,这个时候我们就可以打开环境变量给他加上地址,地址要精确到bin目录 注:开发环境最好是再全局变量上改,否则切换用户就得重新配置
然后直接点开RabbitMQ的安装包,就可以正常安装了,在安装成功后,进入sbin目录中,用命令行 rabbitmqctl status查看状态,如果出现这个东西,就说明是ok的,那我们直接点击 rabbitmq-server.bat 运行就好了
运行成功后即可打开浏览器,输入 http://localhost:15672/来访问,默认的账号密码都是 guest,这里安装就完成了,后面我们来看一下laravel8框架中如何来引入他
Laravel-8 框架中引入 Rabbit MQ
拓展准备
首先,在引入之前,我们要准备一个php拓展 php_amqp ,一般这个是不会默认安装的,需要手动安装,这里我们进去以后需要选择与自己php版本符合的版本,否则会出现不兼容的情况
(前往安装)
安装后,我们要把下面这两个文件分别放在箭头指向的目录中
接着我们去
php.ini中开启这两个拓展 php_amqp.dll是要自己加的,sockets是本身就有的,给他前面的;去掉就好了
安装 配置
这里使用composer来安装,他的命令是
composer require vladimir-yuldashev/laravel-queue-rabbitmq
安装好了以后,我们就要去config/queue/connections中来配置队列
'connections' => [
// RabbitMQ 消息队列
'rabbitmq' => [
'driver' => 'rabbitmq',
'queue' => env('RABBITMQ_QUEUE', 'default'),
'connection' => PhpAmqpLib\Connection\AMQPLazyConnection::class,
'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', '/'),
],
],
'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' => VladimirYuldashev\LaravelQueueRabbitMQ\Queue\Jobs\RabbitMQJob::class,
/*//以下配置是rabbitmq 广播模式(direct)
'exchange' => 'laravel_exchange2',
'exchange_type' => 'direct',
'exchange_routing_key' => 'userkey1',*/
/*//以下配置是rabbitmq 广播模式(topic)
'exchange' => 'laravel_exchange1',
'exchange_type' => 'topic',
'exchange_routing_key' => 'user.info',*/
],
],
/*
* Set to "horizon" if you wish to use Laravel Horizon.
*/
'worker' => env('RABBITMQ_WORKER', 'default'),
],
]
同时.env中也要配置
# RabbitMQ 消息队列
RABBITMQ_HOST=127.0.0.1
RABBITMQ_PORT=5672
# 通过15672创建的rabbitmq虚拟主机,默认是'/' 需要变更,在页面中创建
RABBITMQ_VHOST=cheese-cat-laravel
RABBITMQ_USER=guest
RABBITMQ_PASSWORD=guest
# 通过15672创建的rabbitmq队列
RABBITMQ_QUEUE=laravel_swoole
这里就配置好了,来模拟一下队列场景,创建一个job类:
php artisan make:job TestQueue
在类中写个逻辑
<?php
namespace App\Jobs;
use App\Models\admin\AaaaModel;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
use Illuminate\Support\Facades\DB;
class TestQueue implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $data;
/**
* Create a new job instance.
*
* @return void
*/
public function __construct($data)
{
//
$this->data = $data;
}
/**
* Execute the job.
*
* @return void
*/
public function handle()
{
//
$name = [
'张三',
'李四',
'王五',
'管理员',
'王甜甜',
'李海柱',
'二狗子',
];
$work = [
'公务员',
'网管',
'程序员',
'产品',
'策划',
'运营',
'客户',
];
$doing = [
'打篮球',
'踢足球',
'写代码',
'画原型',
'找女朋友',
'被摧毁',
];
print_r($this->data. ': 你好,我叫'. $name[rand(0, count($name))]. ' 我的工作是:'. $work[rand(0,count($work))]. ' 在'. date('Y-m-d H:i:s', rand(1000000000, 99999999999)). $doing[rand(0, count($doing))]);
}
}
在控制器中调用他:
$number = rand(1,100000);
for ($i = 0; $i < $number; $i++) {
TestQueue::dispatch($number)->onConnection('rabbitmq')->onQueue(env('RABBITMQ_VHOST'));
}
执行消费者命令:
php artisan queue:work rabbitmq --queue=cheese-cat-laravel
好了,今天的分享就到这里,有什么不懂的或错误的地方欢迎在评论区指正、提问!