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采集腾讯微博的实现代码
Jan 19 PHP
PHP容易忘记的知识点分享
Apr 30 PHP
360通用php防护代码(使用操作详解)
Jun 18 PHP
zend framework文件上传功能实例代码
Dec 25 PHP
yii的CURD操作实例详解
Dec 04 PHP
如何实现php图片等比例缩放
Jul 28 PHP
浅谈PHP值mysql操作类
Jun 29 PHP
微信支付扫码支付php版
Jul 22 PHP
在Thinkphp中使用ajax实现无刷新分页的方法
Oct 25 PHP
PHP新特性之字节码缓存和内置服务器
Aug 11 PHP
php分享朋友圈的实现代码
Feb 18 PHP
解决Laravel 不能创建 migration 的问题
Oct 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
日本十大惊悚动漫
2020/03/04 日漫
PHP提交表单失败后如何保留已经填写的信息
2014/06/20 PHP
PHP获取数组长度或某个值出现次数的方法
2015/02/11 PHP
windows server 2008/2012安装php iis7 mysql环境搭建教程
2016/06/30 PHP
基于thinkPHP类的插入数据库操作功能示例
2017/01/06 PHP
PHP连续签到功能实现方法详解
2019/12/04 PHP
Javascript 中的 call 和 apply使用介绍
2012/02/22 Javascript
关于jQuery对象数据缓存Cache原理以及jQuery.data详解
2013/04/07 Javascript
JavaScript获取当前网页标题(title)的方法
2015/04/03 Javascript
浅析$(function) ready和onload 的区别
2016/09/03 Javascript
JS 实现 ajax 异步浏览器兼容问题
2017/01/21 Javascript
如何正确理解javascript的模块化
2017/03/02 Javascript
AngularJS监听路由变化的方法
2017/03/07 Javascript
js控制文本框禁止输入特殊字符详解
2017/04/07 Javascript
ES6 Map结构的应用实例分析
2019/06/26 Javascript
[04:19]DOTA2完美大师赛第四天精彩集锦
2017/11/26 DOTA
python自然语言编码转换模块codecs介绍
2015/04/08 Python
在Python中使用zlib模块进行数据压缩的教程
2015/06/26 Python
Python中的条件判断语句与循环语句用法小结
2016/03/21 Python
Python中循环后使用list.append()数据被覆盖问题的解决
2018/07/01 Python
Python生成个性签名图片获取GUI过程解析
2019/12/16 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
2020/03/23 Python
python实现猜拳游戏项目
2020/11/30 Python
css3模拟jq点击事件的实例代码
2017/07/06 HTML / CSS
Born鞋子官网:Born Shoes
2017/04/06 全球购物
Visual-Click葡萄牙:欧洲领先的在线眼镜商
2020/02/17 全球购物
美容院合作经营协议书
2014/10/10 职场文书
英文道歉信
2015/01/20 职场文书
员工表扬信怎么写
2015/05/05 职场文书
python自动化调用百度api解决验证码
2021/04/13 Python
详解Go与PHP的语法对比
2021/05/29 PHP
分析ZooKeeper分布式锁的实现
2021/06/30 Java/Android
「天才王子的赤字国家重生术」妮妮姆·拉雷粘土人开订
2022/03/21 日漫
java中为什么说子类的构造方法默认访问的是父类的无参构造方法
2022/04/13 Java/Android
解决vue-router的beforeRouteUpdate不能触发
2022/04/14 Vue.js
Python序列化模块JSON与Pickle
2022/06/05 Python