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 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 5

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

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

什么时候出实战案例

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

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!