RabbitMQ 下载使用(PHP:laravel-8框架)

436 阅读3分钟

安装 Rabbit MQ

首先要去rabbitmq官网中下载他的安装包,这里我下载的是3.11.15 windows下载地址

image.png

先别安装!要想安装他,必须要安装一个erlang (Downloads - Erlang/OTP) 进去以后先点击

image.png

默认是64位的,右边的小三角可以选择32位系统!

这个安装好以后,就按照步骤选择安装路径,这里我们安装到了D:work/mq

image.png

image.png

然后再命令行输入erl,如果出现这个,就说明安装成功!

image.png

如果是未识别该命令,那么可能就是你的环境变量没有自动配置,这个时候我们就可以打开环境变量给他加上地址,地址要精确到bin目录 注:开发环境最好是再全局变量上改,否则切换用户就得重新配置

image.png

然后直接点开RabbitMQ的安装包,就可以正常安装了,在安装成功后,进入sbin目录中,用命令行 rabbitmqctl status查看状态,如果出现这个东西,就说明是ok的,那我们直接点击 rabbitmq-server.bat 运行就好了

image.png

image.png

运行成功后即可打开浏览器,输入 http://localhost:15672/来访问,默认的账号密码都是 guest,这里安装就完成了,后面我们来看一下laravel8框架中如何来引入他

image.png

Laravel-8 框架中引入 Rabbit MQ

拓展准备

首先,在引入之前,我们要准备一个php拓展 php_amqp ,一般这个是不会默认安装的,需要手动安装,这里我们进去以后需要选择与自己php版本符合的版本,否则会出现不兼容的情况 (前往安装)

image.png

安装后,我们要把下面这两个文件分别放在箭头指向的目录中

image.png 接着我们去php.ini中开启这两个拓展 php_amqp.dll是要自己加的,sockets是本身就有的,给他前面的;去掉就好了

image.png

image.png

安装 配置

这里使用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'));  
}

image.png 执行消费者命令:

php artisan queue:work rabbitmq --queue=cheese-cat-laravel

image.png

好了,今天的分享就到这里,有什么不懂的或错误的地方欢迎在评论区指正、提问!