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实现多服务器session共享之NFS共享的方法
Mar 16 PHP
PHP获取网站域名和地址的代码
Aug 17 PHP
PHP操作MongoDB时的整数问题及对策说明
May 02 PHP
PHP向浏览器输出内容的4个函数总结
Nov 17 PHP
php利用事务处理转账问题
Apr 22 PHP
php微信开发之上传临时素材
Jun 24 PHP
php 微信公众平台开发模式实现多客服的实例代码
Nov 07 PHP
Laravel学习基础之migrate的使用教程
Oct 11 PHP
PHP CURL与java http使用方法详解
Jan 26 PHP
laravel ORM 只开启created_at的几种方法总结
Jan 29 PHP
thinkPHP框架实现多表查询的方法
Jun 14 PHP
PHP的new static和new self的区别与使用
Nov 27 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
Smarty模板学习笔记之Smarty简介
2014/05/20 PHP
Laravel框架实现修改登录和注册接口数据返回格式的方法
2018/08/17 PHP
PHP连接SQL Server的方法分析【基于thinkPHP5.1框架】
2019/05/06 PHP
JavaScript 字符串与数组转换函数[不用split与join]
2009/12/13 Javascript
jQuery 源码分析笔记(6) jQuery.data
2011/06/08 Javascript
自动最大化窗口的Javascript代码
2013/05/22 Javascript
谷歌浏览器调试JavaScript小技巧
2014/12/29 Javascript
jQuery调取jSon数据并展示的方法
2015/01/29 Javascript
JavaScript+Java实现HTML页面转为PDF文件保存的方法
2016/05/30 Javascript
Bootstrap模态框调用功能实现方法
2016/09/19 Javascript
Node.js发送HTTP客户端请求并显示响应结果的方法示例
2017/04/12 Javascript
基于js原生和ajax的get和post方法以及jsonp的原生写法实例
2017/10/16 Javascript
Vue中props的使用详解
2018/06/15 Javascript
详解VUE中常用的几种import(模块、文件)引入方式
2018/07/03 Javascript
详解ES6 Symbol 的用途
2018/10/14 Javascript
原生js实现ajax请求和JSONP跨域请求操作示例
2020/03/14 Javascript
Python中的rfind()方法使用详解
2015/05/19 Python
Pandas Shift函数的基础入门学习笔记
2018/11/16 Python
pygame游戏之旅 游戏中添加显示文字
2018/11/20 Python
Python图像处理之图像的读取、显示与保存操作【测试可用】
2019/01/04 Python
Python使用scrapy爬取阳光热线问政平台过程解析
2019/08/14 Python
Django Admin设置应用程序及模型顺序方法详解
2020/04/01 Python
Python实现数字的格式化输出
2020/08/01 Python
详解Python的爬虫框架 Scrapy
2020/08/03 Python
浅析css3中matrix函数的使用
2016/06/06 HTML / CSS
HTML5 File API改善网页上传功能
2009/08/19 HTML / CSS
Skyscanner加拿大:全球旅行搜索平台
2018/11/19 全球购物
写一个在SQL Server创建表的SQL语句
2012/03/10 面试题
电子商务个人职业生涯规划范文
2014/02/12 职场文书
保护环境倡议书300字
2014/05/19 职场文书
法学专业大学生实习自我鉴定
2014/10/05 职场文书
借款民事起诉状范文
2015/05/19 职场文书
2016年感恩父亲节活动总结
2016/04/01 职场文书
redis中lua脚本使用教程
2021/11/01 Redis
「天才王子的赤字国家重生术」妮妮姆·拉雷粘土人开订
2022/03/21 日漫