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的类 功能齐全的发送邮件类
Oct 09 PHP
在PHP3中实现SESSION的功能(一)
Oct 09 PHP
linux实现php定时执行cron任务详解
Dec 24 PHP
浅谈php安全性需要注意的几点事项
Jul 17 PHP
PHP+MySQL修改记录的方法
Jan 21 PHP
php模拟post提交数据的方法
Feb 12 PHP
php将图片保存为不同尺寸图片的图片类实例
Mar 30 PHP
PHP获取某个月最大天数(最后一天)的方法
Jul 29 PHP
学习php设计模式 php实现观察者模式(Observer)
Dec 09 PHP
详解如何实现Laravel的服务容器的方法示例
Apr 15 PHP
yii框架使用分页的方法分析
Jul 25 PHP
Laravel框架源码解析之模型Model原理与用法解析
May 14 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
用IE远程创建Mysql数据库的简易程序
2006/10/09 PHP
PHP运行时强制显示出错信息的代码
2011/04/20 PHP
php5.3 注意事项说明
2013/07/01 PHP
php中json_encode UTF-8中文乱码的更好解决方法
2014/09/28 PHP
laravel 5 实现模板主题功能(续)
2015/03/02 PHP
php进行ip地址掩码运算处理的方法
2016/07/11 PHP
Mootools 1.2 手风琴(Accordion)教程
2009/09/15 Javascript
JS拖动技术 关于setCapture使用
2010/12/09 Javascript
jQuery输入城市查看地图使用介绍
2013/05/08 Javascript
Jquery Ajax解析XML数据(同步及异步调用)简单实例
2014/02/12 Javascript
jquery判断浏览器后退时候弹出消息的方法
2014/08/11 Javascript
javascript实现window.print()去除页眉页脚
2014/12/30 Javascript
jQuery 生成svg矢量二维码
2016/08/09 Javascript
使用vue.js实现联动效果的示例代码
2017/01/10 Javascript
JavaScript程序设计高级算法之动态规划实例分析
2017/11/24 Javascript
微信小程序实现动态改变view标签宽度和高度的方法【附demo源码下载】
2017/12/05 Javascript
vue项目在安卓低版本机显示空白的原因分析(两种)
2018/09/04 Javascript
vue子组件改变父组件传递的prop值通过sync实现数据双向绑定(DEMO)
2020/02/01 Javascript
原生js 实现表单验证功能
2021/02/08 Javascript
使用Python的Tornado框架实现一个简单的WebQQ机器人
2015/04/24 Python
给你一面国旗 教你用python画中国国旗
2019/09/24 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
MATLAB数学建模之画图汇总
2020/07/16 Python
Python 捕获代码中所有异常的方法
2020/08/03 Python
简述python Scrapy框架
2020/08/17 Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
2021/02/22 Python
CSS3的Flexbox布局的简明入门指南
2016/04/08 HTML / CSS
金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)-> (一千零一拾一元整)输出
2015/05/29 面试题
运动会广播稿80字
2014/01/23 职场文书
大气污染防治方案
2014/05/19 职场文书
教师党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2014年优秀党员材料
2014/12/18 职场文书
综合素质评价自我评价
2015/03/06 职场文书
超市采购员岗位职责
2015/04/07 职场文书
校车安全管理责任书
2015/05/11 职场文书
2015大学迎新晚会主持词
2015/07/16 职场文书