Homestead(ubuntu) + Laravel 使用RabbitMQ

517 阅读2分钟

安装 erlang

erlangRabbitMQ 的依赖。首先执行

sudo apt-get update

然后执行

sudo apt-get install erlang

安装完毕后,输入 erl 查看 erlang 版本,出现如下提示则表示安装成功:

Erlang/OTP 20 [erts-9.2] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:10] [kernel-poll:false]

Eshell V9.2  (abort with ^G)
1>

然后退出 erlang 命令行:按下 ctrl+c,然后输入 a 即可。

安装 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 插件

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 / admin ".*" ".*" ".*"

打开 RabbitMQ 后台

浏览器中输入:http:// 服务器 ip+:15672, 例如我的是:192.168.10.10:15672/

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

在这里安装可能会遇到一些小问题,遇事不决就执行:

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

sudo -s
echo extension=amqp.so >> /etc/php/7.2/cli/php.ini
echo extension=amqp.so >> /etc/php/7.2/fpm/php.ini
sudo service php7.2-fpm restart

然后执行 php -m 查看扩展是否安装完成

Laravel 项目中使用

添加 RabbitMQ

Package VersionLaravel Version
6.05.5
7.05.6
7.15.7
7.25.8
8.05.9
96
106.7
composer require vladimir-yuldashev/laravel-queue-rabbitmq ^7.1

app/config/queue.php 文件中,connections 数组中添加

'rabbitmq' => [
    'driver'                => 'rabbitmq',

    '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'), // name of the default queue,

    'exchange_declare'      => env('RABBITMQ_EXCHANGE_DECLARE', true), // create the exchange if not exists
    'queue_declare_bind'    => env('RABBITMQ_QUEUE_DECLARE_BIND', true), // create the queue if not exists and bind to the exchange

    'queue_params'          => [
        '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),
    ],

    'exchange_params' => [
        'name'        => env('RABBITMQ_EXCHANGE_NAME', null),
        'type'        => env('RABBITMQ_EXCHANGE_TYPE', 'direct'), // more info at http://www.rabbitmq.com/tutorials/amqp-concepts.html
        'passive'     => env('RABBITMQ_EXCHANGE_PASSIVE', false),
        'durable'     => env('RABBITMQ_EXCHANGE_DURABLE', true), // the exchange will survive server restarts
        'auto_delete' => env('RABBITMQ_EXCHANGE_AUTODELETE', false),
    ],
],

.env 中添加

QUEUE_CONNECTION=rabbitmq #修改一下
RABBITMQ_HOST = 127.0.0.1   #要连接得主机名
RABBITMQ_PORT = 5672  #端口
RABBITMQ_VHOST = / 
RABBITMQ_LOGIN = admin #mq登录名
RABBITMQ_PASSWORD = admin  #mq登陆密码
RABBITMQ_QUEUE = test  #mq连接得测试名

其他和正常跑队列区别不大

php artisan queue:restart
php artisan queue:work