Laravel使用RabbitMQ的方法示例


Posted in PHP onJune 18, 2019

导语

RabbitMQ 想必大家都有了解,不做多介绍来。这里实现的是用 RabbitMQ 作为 Larvel 队列的驱动,替代 Redis。下面以 Laradock 中安装示例。

安装

  1. 切换到 laradock 目录,将 .env 中关于 INSTALL_AMQP 的值修改为 true
  2. docker-compose stop workspace php-fpm php-worker
  3. docker-compose build workspace php-fpm php-worker rabbitmq
  4. docker-compose up -d workspace php-fpm php-worker rabbitmq

扩展包安装以及配置

  1. 进入到 workspace 容器中,在项目目录安装扩展包 composer require vladimir-yuldashev/laravel-queue-rabbitmq
  2. 接下来在 config/queue.php 文件中 connections 添加 rabbitmq 配置,根据情况自行修改
'rabbitmq' => [

  'driver' => 'rabbitmq',

  /*
   * Set to "horizon" if you wish to use Laravel Horizon.
   */
  'worker' => env('RABBITMQ_WORKER', 'default'),

  'dsn' => env('RABBITMQ_DSN', null),

  /*
   * Could be one a class that implements \Interop\Amqp\AmqpConnectionFactory for example:
   * - \EnqueueAmqpExt\AmqpConnectionFactory if you install enqueue/amqp-ext
   * - \EnqueueAmqpLib\AmqpConnectionFactory if you install enqueue/amqp-lib
   * - \EnqueueAmqpBunny\AmqpConnectionFactory if you install enqueue/amqp-bunny
   */

  'factory_class' => Enqueue\AmqpLib\AmqpConnectionFactory::class,

  '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', 'default'),

  'options' => [

    'exchange' => [

      'name' => env('RABBITMQ_EXCHANGE_NAME'),

      /*
       * Determine if exchange should be created if it does not exist.
       */

      'declare' => env('RABBITMQ_EXCHANGE_DECLARE', true),

      /*
       * Read more about possible values at https://www.rabbitmq.com/tutorials/amqp-concepts.html
       */

      'type' => env('RABBITMQ_EXCHANGE_TYPE', \Interop\Amqp\AmqpTopic::TYPE_DIRECT),
      'passive' => env('RABBITMQ_EXCHANGE_PASSIVE', false),
      'durable' => env('RABBITMQ_EXCHANGE_DURABLE', true),
      'auto_delete' => env('RABBITMQ_EXCHANGE_AUTODELETE', false),
      'arguments' => env('RABBITMQ_EXCHANGE_ARGUMENTS'),
    ],

    'queue' => [

      /*
       * Determine if queue should be created if it does not exist.
       */

      'declare' => env('RABBITMQ_QUEUE_DECLARE', true),

      /*
       * Determine if queue should be binded to the exchange created.
       */

      'bind' => env('RABBITMQ_QUEUE_DECLARE_BIND', true),

      /*
       * Read more about possible values at https://www.rabbitmq.com/tutorials/amqp-concepts.html
       */

      '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),
      'arguments' => env('RABBITMQ_QUEUE_ARGUMENTS'),
    ],
  ],

  /*
   * Determine the number of seconds to sleep if there's an error communicating with rabbitmq
   * If set to false, it'll throw an exception rather than doing the sleep for X seconds.
   */

  'sleep_on_error' => env('RABBITMQ_ERROR_SLEEP', 5),

  /*
   * Optional SSL params if an SSL connection is used
   * Using an SSL connection will also require to configure your RabbitMQ to enable SSL. More details can be founds here: https://www.rabbitmq.com/ssl.html
   */

  'ssl_params' => [
    'ssl_on' => env('RABBITMQ_SSL', false),
    '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),
  ],

],

在 .env 中修改 QUEUE_CONNECTION 为 rabbitmq ,并添加以下值

RABBITMQ_WORKER=horizon
RABBITMQ_HOST=rabbitmq
RABBITMQ_PORT=5672
RABBITMQ_LOGIN=guest
RABBITMQ_PASSWORD=guest
RABBITMQ_QUEUE=default

有两个值说明一下,因为是在 Laradock 中,所以 RABBITMQ_HOST 设置为 rabbitmq ;如果之前使用了Laravel Horizon,那么 RABBITMQ_WORKER 的设置为 horizon 就可以了。

参考资料:laravel-queue-rabbitmq 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
用PHP调用Oracle存储过程的方法
Sep 12 PHP
php MsSql server时遇到的中文编码问题
Jun 11 PHP
php中计算中文字符串长度、截取中文字符串的函数代码
Aug 09 PHP
PHP判断远程url是否有效的几种方法小结
Oct 08 PHP
关于PHP实现异步操作的研究
Feb 03 PHP
如何取得中文字符串中出现次数最多的子串
Aug 08 PHP
PHP实现的博客欢迎提示功能(很特别哦)
Jun 05 PHP
Yii2框架BootStrap样式的深入理解
Nov 07 PHP
PHP实现多图上传(结合uploadify插件)思路分析
Nov 30 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
Aug 28 PHP
php数组遍历类与用法示例
May 24 PHP
WordPress多语言翻译插件 - WPML使用教程
Apr 01 PHP
thinkphp整合系列之极验滑动验证码geetest功能
Jun 18 #PHP
PHP Trait代码复用类与多继承实现方法详解
Jun 17 #PHP
php设计模式之装饰模式应用案例详解
Jun 17 #PHP
php设计模式之策略模式应用案例详解
Jun 17 #PHP
PHP实现将上传图片自动缩放到指定分辨率,并保持清晰度封装类示例
Jun 17 #PHP
PHP 并发场景的几种解决方案
Jun 14 #PHP
PHP 实现文件压缩解压操作的方法
Jun 14 #PHP
You might like
用PHP查询搜索引擎排名位置的代码
2010/01/05 PHP
有道搜索和IP138的IP的API接口(PHP应用)
2012/11/29 PHP
PHP的curl实现get,post和cookie(实例介绍)
2013/06/17 PHP
PHP字符串长度计算 - strlen()函数使用介绍
2013/10/15 PHP
php实现将Session写入数据库
2015/07/26 PHP
php实现XSS安全过滤的方法
2015/07/29 PHP
php视频拍照上传头像功能实现代码分享
2015/10/08 PHP
Yii2实现ajax上传图片插件用法
2016/04/28 PHP
php版交通银行网银支付接口开发入门教程
2016/09/26 PHP
按钮JS复制文本框和表格的代码
2011/04/01 Javascript
javascript面向对象之访问对象属性的两种方式分析
2015/01/13 Javascript
JS实现带关闭功能的阿里妈妈网站顶部滑出banner工具条代码
2015/09/17 Javascript
Javascript获取数组中的最大值和最小值的方法汇总
2016/01/01 Javascript
Nodejs如何复制文件
2016/03/09 NodeJs
详解vue中async-await的使用误区
2018/12/05 Javascript
vue使用prop可以渲染但是打印台报错的解决方式
2019/11/13 Javascript
[00:28]DOTA2北京网鱼队选拔赛
2015/04/08 DOTA
[02:20]DOTA2亚洲邀请赛 IG战队出场宣传片
2015/02/07 DOTA
[50:11]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第三场
2018/04/09 DOTA
python元组操作实例解析
2014/09/23 Python
Python多进程机制实例详解
2015/07/02 Python
Python中optparser库用法实例详解
2018/01/26 Python
详解python:time模块用法
2019/03/25 Python
tensorboard实现同时显示训练曲线和测试曲线
2020/01/21 Python
Python分析最近大火的网剧《隐秘的角落》
2020/07/02 Python
python3 使用ssh隧道连接mysql的操作
2020/12/05 Python
New Balance法国官方网站:购买鞋子和服装
2019/09/01 全球购物
亿阳信通股份有限公司笔试题(C#)
2016/03/04 面试题
售后服务科岗位职责范文
2013/11/13 职场文书
大学英语演讲稿(中英文对照)
2014/01/14 职场文书
政府绩效管理实施方案
2014/05/04 职场文书
寒暑假实习证明书模板
2014/11/29 职场文书
2014年销售员工作总结
2014/12/01 职场文书
食品质检员岗位职责
2015/04/08 职场文书
初二英语教学反思
2016/02/15 职场文书
redis配置文件中常用配置详解
2021/04/14 Redis