Laravel框架安装RabbitMQ消息中间件步骤

摘要:
Laravel5.6中RabbitMQ消息队列集成简介:Laravel队列为不同的后台队列服务提供了统一的API,如Beanstalk、Amazon SQS、Redis,甚至其他基于关系数据库的队列。队列的目的是延迟处理耗时的任务,例如发送电子邮件,从而大大减少Web请求和响应的时间。每个队列驱动程序的配置都可以在此文件中找到,包括数据库、Beanstalkd、Amazon SQS、Redis和同步驱动器。它还包含用于放弃队列的任务的空队列驱动程序。

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、可以在浏览器测试代码是否流畅

Laravel框架安装RabbitMQ消息中间件步骤第1张

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

php artisan queue:work 

  例:

Laravel框架安装RabbitMQ消息中间件步骤第2张

打开rabbitMQ中可以看到

Laravel框架安装RabbitMQ消息中间件步骤第3张

免责声明:文章转载自《Laravel框架安装RabbitMQ消息中间件步骤》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇一个空间绑定多个域名实现自动跳转的几种方法!tidb集群部署下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

第一百八十节,jQuery-UI,知问前端--消息提示 UI

jQuery-UI,知问前端--消息提示 UI 学习要点:   1.HTML 部分   2.CSS 部分   3.jQuery 部分 通过前面已学的 jQuery UI 部件,我们来创建一个注册表单。 html <div id="reg" title="会员注册"> <p> <label fo...

DeepFacelab更新:分辨率提至640,效率翻倍!

这几天又更新了,好事儿是又有新功能可以玩了,“坏事儿”是感觉又要升级设备了。其实,总的来说这次更新,对低配高配玩家都有好消息。 1. 对于高配玩家,可以跑更高像素的模型。 2. 对于低配玩家,那些跑不起的像素也能跑起来了。 下面就来说说重点更新内容: 1.  模型训练参数 resolution 的最大值从512调到了640。 ​ 这意味着对于高配玩家来说可...

十六、源码部署EFK之快乐没有了

一、事情起因 我看的老男孩76期ELK课程的day106缺了第12集,这一集讲的是安装Filebeat呈现Nginx日志的过程,于是快乐没有了。 因为课程缺失,我看了很多关于Filebeat的博文,但由于版本差异,配置文件也有些许差异;同时还有架构上的不同,导致各式各样的安装方式;为了少走弯路同时更加深入的了解ELK的部署以及运行,我花了两天时间看完了千锋...

在App中添加微信分享功能

随着微信平台运用越来越普遍,在app中往往需要将看到的消息发送给微信好友,分享到朋友圈,因此就需要添加微信分享的功能。我们可以通过微信的开发者平台上的相关文档来实现这个简单的功能。 1.在微信开发者平台注册应用程序的id,通过审核后可以获得一个appid 2.有了appID后下载最新的微信终端sdk文件,SDK文件包括 libWeChatSDK.a,WXA...

java中使用MD5进行加密(转)

   在各种应用系统的开发中,经常需要存储用户信息,很多地方都要存储用户密码,而将用户密码直接存储在服务器上显然是不安全的,本文简要介绍工作中常用的 MD5加密算法,希望能抛砖引玉。(一)消息摘要简介    一个消息摘要就是一个数据块的数字指纹。即对一个任意长度的一个数据块进行计算,产生一个唯一指印(对于SHA1是产生一个20字节的二进制数组)。消息摘要是...

5G信令(就是用户身份信息)风暴——就是客户端通过公钥加密的消息(携带手机IMSI号)发给服务端,服务器需用私钥解密,这个解密比较消耗资源,如果短时间大量请求到来就会触发信令风暴

信令:手机开机后,先从USIM中读取之前运营商分配的临时身份信息GUTI/TMSI,发送携带该身份信息的信令给基站,请求接入运营商网络。 如果每个设备的每条消息都需要单独认证,则网络侧安全信令的验证需要消耗大量资源。在传统4G网络认证机制中没有考虑到这种海量认证信令的问题,一旦网络收到终端信令请求超过了网络各项信令资源的处理能力,则会触发信令风暴,导致网络...