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
测试您的 PHP 水平的题目
May 30 PHP
jQuery中的RadioButton,input,CheckBox取值赋值实现代码
Feb 18 PHP
ThinkPHP使用smarty模板引擎的方法
Jul 01 PHP
php计算两个日期相差天数的方法
Mar 14 PHP
支持中文的PHP按字符串长度分割成数组代码
May 17 PHP
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
May 11 PHP
PHP的时间戳与具体时间转化的简单实现
Jun 13 PHP
php-fpm.conf配置文件中文说明详解及重要参数说明
Oct 10 PHP
PHP实现百度人脸识别
May 06 PHP
Yii框架响应组件用法实例分析
Sep 04 PHP
浅谈laravel框架与thinkPHP框架的区别
Oct 23 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
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
php模拟post行为代码总结(POST方式不是绝对安全)
2012/02/22 PHP
php 问卷调查结果统计
2015/10/08 PHP
PHP中strtr与str_replace函数运行性能简单测试示例
2019/06/22 PHP
在laravel框架中使用model层的方法
2019/10/08 PHP
jquery 弹出层注册页面等(asp.net后台)
2010/06/17 Javascript
突发奇想的一个jquery插件
2010/11/19 Javascript
jQuery Ajax使用 全解析
2010/12/15 Javascript
基于mootools插件实现遮罩层新手引导
2012/05/24 Javascript
javascript面向对象之对象的深入理解
2015/01/13 Javascript
基于JavaScript实现一定时间后去执行一个函数
2015/12/14 Javascript
js中class的点击事件没有效果的解决方法
2016/10/13 Javascript
JS瀑布流实现方法实例分析
2016/12/19 Javascript
AngularJS中的按需加载ocLazyLoad示例
2017/01/11 Javascript
jackson解析json字符串,首字母大写会自动转为小写的方法
2017/12/22 Javascript
layui富文本编辑器前端无法取值的解决方法
2019/09/18 Javascript
[19:15]DK战队纪录片
2014/09/02 DOTA
Flask数据库迁移简单介绍
2017/10/24 Python
python+pyqt5实现图片批量缩放工具
2019/03/18 Python
python3中的eval和exec的区别与联系
2019/10/10 Python
python实现学生管理系统开发
2020/07/24 Python
css3 中实现炫酷的loading效果
2019/04/26 HTML / CSS
CSS3 rgb and rgba(透明色)的使用详解
2020/09/25 HTML / CSS
美国领先的户外服装与装备用品店:Moosejaw
2016/08/25 全球购物
体验完美剃须:The Art of Shaving
2018/08/06 全球购物
adidas爱尔兰官方网站:阿迪达斯运动鞋和运动服
2019/11/01 全球购物
伦敦新晋轻奢耳饰潮牌:Tada & Toy
2020/05/25 全球购物
英语自荐信范文
2013/12/11 职场文书
公益活动策划方案
2014/01/09 职场文书
群众路线教育实践活动剖析材料
2014/09/30 职场文书
杭白菊导游词
2015/02/10 职场文书
高三教师工作总结2015
2015/07/21 职场文书
银行柜员工作心得体会
2016/01/23 职场文书
2016年五一促销广告语
2016/01/28 职场文书
python flask开发的简单基金查询工具
2021/06/02 Python
sql字段解析器的实现示例
2021/06/23 SQL Server