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 删除记录实现代码
Mar 12 PHP
PHP序列号生成函数和字符串替换函数代码
Jun 07 PHP
PHP超级全局变量数组小结
Oct 04 PHP
深入解析PHP中的(伪)多线程与多进程
Jul 01 PHP
PHP 通过Socket收发十六进制数据的实现代码
Aug 16 PHP
PHP eval函数使用介绍
Dec 08 PHP
zend framework文件上传功能实例代码
Dec 25 PHP
php中stream(流)的用法
Mar 25 PHP
php把时间戳转换成多少时间之前函数的实例
Nov 16 PHP
Laravel学习教程之本地化模块
Aug 18 PHP
PHP实现生成数据字典功能示例
May 24 PHP
PHP7 windows支持
Mar 09 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
实现分十页分向前十页向后十页的处理
2006/10/09 PHP
php whois查询API制作方法
2011/06/23 PHP
coreseek 搜索英文的问题详解
2013/06/08 PHP
PHP页面中文乱码分析
2013/10/29 PHP
PHP中spl_autoload_register()和__autoload()区别分析
2014/05/10 PHP
详解php比较操作符的安全问题
2015/12/03 PHP
CI框架表单验证实例详解
2016/11/21 PHP
多广告投放代码 推荐
2006/11/13 Javascript
jQuery获取css z-index在各种浏览器中的返回值
2010/09/15 Javascript
基于JQuery制作的产品广告效果
2010/12/08 Javascript
javascript判断ie浏览器6/7版本加载不同样式表的实现代码
2011/12/26 Javascript
js实现广告漂浮效果的小例子
2013/07/02 Javascript
判断在css加载完毕后执行后续代码示例
2014/09/03 Javascript
JS实现不规则TAB选项卡效果代码
2015/09/16 Javascript
JavaScript获取图片像素颜色并转换为box-shadow显示
2016/03/11 Javascript
Jquery Easyui验证组件ValidateBox使用详解(20)
2016/12/18 Javascript
bootstrap paginator分页插件的两种使用方式实例详解
2017/11/14 Javascript
AngularJS下$http服务Post方法传递json参数的实例
2018/03/29 Javascript
js取0-9随机取4个数不重复的数字代码实例
2019/03/27 Javascript
微信小程序开发(一):服务器获取数据列表渲染操作示例
2020/06/01 Javascript
[06:07]刀塔密之二:攻之吾命受之吾幸
2014/07/03 DOTA
Python中使用第三方库xlutils来追加写入Excel文件示例
2015/04/05 Python
python使用WMI检测windows系统信息、硬盘信息、网卡信息的方法
2015/05/15 Python
浅析Python中的getattr(),setattr(),delattr(),hasattr()
2016/06/14 Python
django开发之settings.py中变量的全局引用详解
2017/03/29 Python
python 借助numpy保存数据为csv格式的实现方法
2018/07/04 Python
Sanic框架路由用法实例分析
2018/07/16 Python
Python 用三行代码提取PDF表格数据
2019/10/13 Python
Python笔记之facade模式
2019/11/20 Python
选购世界上最好的美妆品:Cult Beauty
2017/11/03 全球购物
Merrell美国官网:美国登山运动鞋品牌
2018/02/07 全球购物
乡镇创先争优活动总结
2014/08/28 职场文书
教师先进事迹材料
2014/12/16 职场文书
党员转正大会主持词
2015/07/02 职场文书
幼儿园语言教学反思
2016/02/23 职场文书
Python爬虫基础之简单说一下scrapy的框架结构
2021/06/26 Python