zoukankan      html  css  js  c++  java
  • Laravel框架安装RabbitMQ消息中间件步骤

    Laravel5.6 整合 RabbitMQ 消息队列

     

    简介:

    Laravel 队列为不同的后台队列服务提供了统一的 API,例如 Beanstalk,Amazon SQS,Redis,甚至其他基于关系型数据库的队列。队列的目的是将耗时的任务延时处理,比如发送邮件,从而大幅度缩短 Web 请求和响应的时间。

    队列配置文件存放在 config/queue.php。每一种队列驱动的配置都可以在该文件中找到,包括数据库、BeanstalkdAmazon SQSRedis以及同步(本地使用)驱动。其中还包含了一个 null 队列驱动用于那些放弃队列的任务。

    本程序猿Laravel框架的版本为5.8(亲测5.7亦可)

    1、Composer 安装 laravel-queue-rabbitmq

    composer require vladimir-yuldashev/laravel-queue-rabbitmq

    2、在 config/app.php 文件中,providers 中添加:

    VladimirYuldashev\LaravelQueueRabbitMQ\LaravelQueueRabbitMQServiceProvider::class,

    2.1、有时composer版本不足会出现种种错误,所以防止意外升级一下composer版本(确定无误亦可省略)

    composer update

    3、在 app/config/queue.php(版本不同,大部分用户在没有在app目录之下,直接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),
        ],
     
    ],

    4、修改 .env 文件

    QUEUE_CONNECTION=rabbitmq  #修改一下
    
    RABBITMQ_HOST=112.74.182.5  #要连接的主机名
    RABBITMQ_PORT=5672         #端口号
    RABBITMQ_VHOST=/
    RABBITMQ_LOGIN=admin       #mq登录名
    RABBITMQ_PASSWORD=admin     #mq登录密码
    RABBITMQ_QUEUE=test11111         #mq连接的名称(随便写)

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

    5、创建任务类

    php artisan make:job Queue

    执行之后会生成一个文件 app/Jobs/Queue.php文件

    修改Queue.php文件内容,下面主要的功能是添加一个时间并且转化成json格式

    <?php
    
    namespace App\Jobs;
    
    
    use Illuminate\Bus\Queueable;
    use Illuminate\Foundation\Bus\Dispatchable;
    use Illuminate\Queue\SerializesModels;
    use Illuminate\Queue\InteractsWithQueue;
    use Illuminate\Contracts\Queue\ShouldQueue;
    
    class Queue  implements ShouldQueue
    {
        use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    
        private $data;
    
        /**
         * Queue constructor.
         * @param $data
         */
        public function __construct($data)
        {
            $this->data = $data;
    
        }
    
        /**
         * Execute the job.
         *
         * @return void
         */
        public function handle()
        {
            return json_encode($this->data);
    
        }
    }

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

    php artisan make:controller QueuedController

    控制器中内容,可直接参考亦可按照自己思路修改,如下:

    <?php
    
    namespace App\Http\Controllers;
    
    
    use Illuminate\Http\Request;
    
    use App\Http\Requests;
    use App\Jobs\Queue;
    
    class QueuedController extends Controller
    {
        public function Test(){
    
            $arr=array(
                'time'=>time()
            );
    
            $this->dispatch(new Queue($arr));
            echo "成功";
      } 
    }

    7、在路由配置文件--web.php 中加入一个路由,用来调用控制器中的test方法

    Route::get('/test','QueuedController@test');

    8、可以在浏览器测试代码是否流畅

      8.2同时输入命令 、执行命令进行消费:

    php artisan queue:work 

      例:

    打开rabbitMQ中可以看到

  • 相关阅读:
    Python的七大数据类型整理
    Linux下获取线程ID tid的方法
    字符串逆序操作
    ftp的两种模式
    exec函数族
    代码行数统计(指定目录下所有文件的Line)
    windows 命令行操作
    C语言时间打印
    Anaconda下载安装说明
    python 使用request进行get post请求
  • 原文地址:https://www.cnblogs.com/T8888/p/10907541.html
Copyright © 2011-2022 走看看