laravel5.8集成RabbitMQ实现异步队列

PHP要安装并打开amqp扩展和sockets扩展
自行安装所基于Erlang环境 RabbitMQ客户端
上链接 https://www.jianshu.com/p/3874a446a1e0
1.安装RabbitMQ扩展

composer require vladimir-yuldashev/laravel-queue-rabbitmq:版本号

根据laravel版本安装对应的版本
在这里插入图片描述
https://github.com/vyuldashev/laravel-queue-rabbitmq
2.在config/queue.php的 connections数组里加入下面的代码

'rabbitmq' => [
    'driver'                => 'rabbitmq',
 
    'host'                  => env('RABBITMQ_HOST', '127.0.0.1'),
    'port'                  => env('RABBITMQ_PORT', 5672),
 
    'vhost'                 => env('RABBITMQ_VHOST', '/'),
    'login'                 => env('RABBITMQ_LOGIN', 'guest'),
    'password'              => env('RABBITMQ_PASSWORD', 'guest'),
 
    'queue'                 => env('RABBITMQ_QUEUE'), // name of the default queue,
 
    'exchange_declare'      => env('RABBITMQ_EXCHANGE_DECLARE', true), // create the exchange if not exists
    'queue_declare_bind'    => env('RABBITMQ_QUEUE_DECLARE_BIND', true), // create the queue if not exists and bind to the exchange
 
    'queue_params'          => [
        'passive'           => env('RABBITMQ_QUEUE_PASSIVE', false),
        'durable'           => env('RABBITMQ_QUEUE_DURABLE', true),
        'exclusive'         => env('RABBITMQ_QUEUE_EXCLUSIVE', false),
        'auto_delete'       => env('RABBITMQ_QUEUE_AUTODELETE', false),
    ],
 
    'exchange_params' => [
        'name'        => env('RABBITMQ_EXCHANGE_NAME', null),
        'type'        => env('RABBITMQ_EXCHANGE_TYPE', 'direct'), // more info at http://www.rabbitmq.com/tutorials/amqp-concepts.html
        'passive'     => env('RABBITMQ_EXCHANGE_PASSIVE', false),
        'durable'     => env('RABBITMQ_EXCHANGE_DURABLE', true), // the exchange will survive server restarts
        'auto_delete' => env('RABBITMQ_EXCHANGE_AUTODELETE', false),
    ],
 
],
  1. 修改.env文件
QUEUE_CONNECTION=rabbitmq  #修改一下

RABBITMQ_HOST=127.0.0.1  #要连接的主机名
RABBITMQ_PORT=5672         #端口号
RABBITMQ_VHOST=/
RABBITMQ_LOGIN=guest       #mq登录名
RABBITMQ_PASSWORD=guest     #mq登录密码
RABBITMQ_QUEUE=rebbitmq       #mq连接的名称(随便写)

PS:修改.env文件时要注意此六行代码在你的文件中没有重复出现,或者重复出现但“=”后面的属性不一样也不行,可能会引起冲突,功能出现灵异错误

4.创建任务类

php artisan make:job Queue

执行之后会生成一个文件 app/Jobs/Queue.php文件
修改Queue.php文件内容,下面主要的功能是添加到数据库

<?php

namespace App\Jobs;

use App\Models\TUsers;
use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;



class Queue implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        //添加学生
        $ini = [
            'name' => rand(1, 100),
            'sex' => rand(1, 2),
        ];
        $data =TUsers::Create($ini);
        echo  1;

    }
}

5.生产,把数据放进 mq 队列,使用命令创建一个控制器

<?php
namespace App\Http\Controllers;
use App\Models\TUser;
use App\Jobs\Queue as JobsQueue;
use App\Models\TUsers;

class IndexController extends Controller
{
    public function insert()
    {
        
        JobsQueue::dispatch();
        echo 111;
    }
}

6.在路由配置文件–web.php 中加入一个路由,用来调用控制器中的insert方法

Route::get('/index','IndexController@insert');

每访问一次 生产一个
7.执行

php artisan queue:work

在这里插入图片描述
8. 登录RabbitMQ访问127.0.0.1:15672 账号 guest 密码guest
9. 观察
在这里插入图片描述
在这里插入图片描述
再放个链接 https://rabbitmq.shujuwajue.com/


版权声明:本文为php12345679原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。