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 相关文章推荐
如何用phpmyadmin设置mysql数据库用户的权限
Jan 09 PHP
php ZipArchive压缩函数详解实例
Nov 06 PHP
叫你如何修改Nginx与PHP的文件上传大小限制
Sep 10 PHP
php使用gettimeofday函数返回当前时间并存放在关联数组里
Mar 19 PHP
php计算两个坐标(经度,纬度)之间距离的方法
Apr 17 PHP
php实现模拟登陆方正教务系统抓取课表
May 19 PHP
微信红包随机生成算法php版
Jul 21 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
Aug 20 PHP
PHP使用mongoclient简单操作mongodb数据库示例
Feb 08 PHP
PHP利用递归函数实现无限级分类的方法
Mar 22 PHP
PHP切割整数工具类似微信红包金额分配的思路详解
Sep 18 PHP
Laravel获取所有的数据库表及结构的方法
Oct 10 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提交表单失败后如何保留已经填写的信息
2014/06/20 PHP
PHP实现Soap通讯的方法
2014/11/03 PHP
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
CI框架中$this->load->library()用法分析
2016/05/18 PHP
php 使用html5实现多文件上传实例
2016/10/24 PHP
php异步:在php中使用fsockopen curl实现类似异步处理的功能方法
2016/12/10 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
2019/10/15 PHP
一个可以兼容IE FF的加为首页与加入收藏实现代码
2009/11/02 Javascript
js如何判断用户是在PC端和还是移动端访问
2014/04/24 Javascript
js中window.open打开一个新的页面
2014/08/10 Javascript
让图片跳跃起来  javascript图片轮播特效
2016/02/16 Javascript
原生javascript+css3编写的3D魔方动画旋扭特效
2016/03/14 Javascript
jQuery unbind 删除绑定事件详解
2016/05/24 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
2017/06/09 Javascript
Vue axios 中提交表单数据(含上传文件)
2017/07/06 Javascript
JavaScript中使用Async实现异步控制
2017/08/15 Javascript
jquery animate动画持续运动的实例
2017/11/29 jQuery
基于vue实现网站前台的权限管理(前后端分离实践)
2018/01/13 Javascript
利用Decorator如何控制Koa路由详解
2018/06/26 Javascript
vue的.vue文件是怎么run起来的(vue-loader)
2018/12/10 Javascript
fetch 如何实现请求数据
2018/12/20 Javascript
微信小程序实现蒙版弹出窗功能
2019/09/17 Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
2019/12/31 Javascript
一看就会的vuex实现登录验证(附案例)
2020/01/09 Javascript
基于JS实现操作成功之后自动跳转页面
2020/09/25 Javascript
[48:24]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第一场 12.09
2020/12/12 DOTA
python实现上传样本到virustotal并查询扫描信息的方法
2014/10/05 Python
python实现图片插入文字
2019/11/26 Python
Django数据库操作之save与update的使用
2020/04/01 Python
html5拍照功能实现代码(htm5上传文件)
2013/12/11 HTML / CSS
Harrods英国:世界领先的奢侈品百货商店
2020/09/23 全球购物
工商企业管理专业自荐信范文
2014/04/12 职场文书
​(迎国庆)作文之我爱我的祖国
2019/09/19 职场文书
一文彻底理解js原生语法prototype,__proto__和constructor
2021/10/24 Javascript
联想win10摄像头打不开怎么办?win10笔记本摄像头打不开解决办法
2022/04/08 数码科技