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 协议》,转载必须注明作者和本文链接
什么时候出实战案例
我安装的时候遇到了一个问题 在执行sudo pecl install amqp的时候,报错信息如下 checking for amqp using pkg-config... found version 0.4.1 configure: error: librabbitmq must be version 0.7.1 or greater ERROR: `/tmp/pear/temp/amqp/configure --with-php-config=/usr/bin/php-config --with-librabbitmq-dir' failed 不知道楼主遇到过这个问题没有?
我尝试了编译安装amqp还是报类似的错误,请问下楼主这个要怎么解决呢