laravel 队列之Homestead(ubuntu)下laravel使用RabbitMQ——服务器配置篇

  • 前言#

    最近在投简历和面试的过程中,发现很多做电商的企业均要求 KafkaRabbitMQ。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 肯定也可以!

  • 开始#

  1. 安装 erlang
    erlang 是 RabbitMQ 的依赖。首先执行
    sudo apt-get update
    然后执行
    sudo apt-get install erlang
    安装完毕后,输入 erl 查看 erlang 版本,出现如下提示则表示安装成功:
    Erlang R16B03 (erts-5.10.4) [source] [64-bit] [async-threads:10] [kernel-poll:false]
    然后退出 erlang 命令行:按下 ctrl+c,然后输入 a 即可。
  2. 安装 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 
  3. 配置 RabbitMQ
    执行命令,启动 RabbitMQ 插件:
    sudo rabbitmq-plugins enable rabbitmq_management
    这个可以启动 RabbitMQ 的 web 控制台。

添加用户 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 后台了。

  1. 打开 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

退出重启服务器,访问结果:

  1. 运行环境(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
    在这里安装可能会遇到一些小问题,遇事不决就执行:
    sudo apt-get update
    //时间可能会需要很久,我执行等它运行的时候大概花了一个小时
    sudo apt-get upgrade
    以上的扩展安装完成后执行指令安装 amqp 扩展:
    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 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 5

什么时候出实战案例

4年前 评论
她来听我的演唱会 (楼主) 4年前
kingjian (作者) 4年前

我安装的时候遇到了一个问题 在执行 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 还是报类似的错误,请问下楼主这个要怎么解决呢

3年前 评论
StimmerLove (作者) 3年前