laravel 队列之Homestead(ubuntu)下laravel使用RabbitMQ——服务器配置篇
前言#
最近在投简历和面试的过程中,发现很多做电商的企业均要求Kafka
和RabbitMQ
。Kafka 暂未研究,今天先来看一看如何在 Homestead 下结合 laravel 使用 RabbitMQ(基本概念可参考此文:RabbitMQ 消息队列)参考资料#
感谢所有文章作者!
RabbitMQ 消息队列
laravel + rabbitmq
laravel 下安装 RabbitMQ:Github
ubuntu 下使用 apt-get 一步步安装 rabbitmq
laravel 中文文档 - 队列
ubuntu 下安装 amqp 扩展准备阶段#
首先开始前,要明白队列的基本概念:Laravel 队列为各种不同的队列后端 (如 Beanstalk、Amazon SQS、Redis 甚至关系数据库) 提供了的统一 API。通过队列,你可以将耗时任务 (如发送电子邮件) 的处理往后推延。延迟这些耗时的任务可以极大地提升 web 请求响应速度。
由此可知,队列一般是作为延时任务
。由此可以推断出,对于电商业务,队列可以做发送邮件,用户下单(例如 30 分钟不付款关闭订单)等功能。
之前使用 Redis 体验过简单的队列,使用队列发送邮件,而 laravel 提供的队列,常用的就是 redis,具体使用方法就是安装相关的包,修改配置文件.evn
或者 app/config/queque.php
的队列连接 (以 redis 为例):.evn:
QUEUE_CONNECTION=redis
app/config/queque.php:
'default' => env('QUEUE_CONNECTION', 'redis'),
因此不难看出,原则上不管是什么队列,只要修改默认队列连接,就可以使用该队列消息。#
之前的公司使用过 mqtt,mqtt 使用除了在服务端和接口等使用,还可以通过安装(类似于宝塔那种),有一个 mqtt 的管理后台,更加方便管理。当我看到这篇文章 laravel + rabbitmq,突然让我有了大胆的想法。docker 可以,那 Homestead 肯定也可以!
开始#
- 安装 erlang
erlang 是 RabbitMQ 的依赖。首先执行然后执行sudo apt-get update
安装完毕后,输入sudo apt-get install erlang
erl
查看 erlang 版本,出现如下提示则表示安装成功:然后退出 erlang 命令行:按下 ctrl+c,然后输入 a 即可。Erlang R16B03 (erts-5.10.4) [source] [64-bit] [async-threads:10] [kernel-poll:false]
- 安装 RabbitMq:
执行:等待安装完毕提示:sudo apt-get install rabbitmq-server
安装完毕后,查看 RabbitMQ 状态:sudo rabbitmqctl status
附:启动RabbitMQ: service rabbitmq-server start 停止RabbitMQ: service rabbitmq-server stop 重启RabbitMQ: service rabbitmq-server restart
- 配置 RabbitMQ
执行命令,启动 RabbitMQ 插件:这个可以启动 RabbitMQ 的 web 控制台。sudo rabbitmq-plugins enable rabbitmq_management
添加用户 RabbitMQ,格式:rabbitmqctl add_user 用户名 密码
。
例如:
rabbitmqctl add_user admin admin
给予用户管理员权限:
sudo rabbitmqctl set_user_tags admin administrator
为用户设置读写权限:
sudo rabbitmqctl set_permissions -p / 用户名 ".*" ".*" ".*"
如:
sudo rabbitmqctl set_permissions -p / admin “.*” “.*” “.*”
好了,至此就可以访问 RabbitMQ 后台了。
- 打开 RabbitMQ 后台:
浏览器中输入:http:// 服务器 ip+:15672, 例如我的是:192.168.10.10:15672/
但是这里就有个问题,浏览器提示:无法访问此网站192.168.10.10 拒绝了我们的连接请求。
原因是服务器(ubuntu)15672 端口默认是关闭的,因此需要打开。
很简单,执行两条指令:
1. sudo apt-get install iptables
2. sudo iptables -I INPUT -p tcp --dport 15672 -j ACCEPT
退出重启服务器,访问结果:
- 运行环境(ubuntu)安装 amqp 扩展
这些扩展是运行必须,可以类比为 mongodb,redis 扩展。
分别执行以下指令:在这里安装可能会遇到一些小问题,遇事不决就执行:sudo apt-get -y install gcc make autoconf libc-dev pkg-config sudo apt-get -y install libssl-dev sudo apt-get -y install librabbitmq-dev
以上的扩展安装完成后执行指令安装 amqp 扩展:sudo apt-get update //时间可能会需要很久,我执行等它运行的时候大概花了一个小时 sudo apt-get upgrade
安装过程中会提示:sudo pecl install amqp
回车即可,等待安装完成:28 source files, building running: phpize Configuring for: PHP Api Version: 20170718 Zend Module Api No: 20170718 Zend Extension Api No: 320170718 Set the path to librabbitmq install prefix [autodetect] :
You should add "extension=amqp.so" to php.ini
这里还会有个小坑,php.ini 在 /etc/php/7.2 下有两个(具体自己的 php 版本是哪个可以使用php -v
查看),一个是:/etc/php/7.2/cli/php.ini
,另一个是:/etc/php/7.2/fpm/php.ini
,因此,不管加入什么扩展都要分别加入进去。
加入完成,重启 php:sudo service php7.2-fpm restart
。然后执行php -m
查看扩展是否安装完成:
至此,RabbitMQ 的服务器端配置完成。
下一篇将会记录应用端如何去应用 RabbitMQ。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: