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中可以看到


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM