安装 erlang
erlang
是 RabbitMQ
的依赖。首先执行
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 Version | Laravel Version |
---|---|
6.0 | 5.5 |
7.0 | 5.6 |
7.1 | 5.7 |
7.2 | 5.8 |
8.0 | 5.9 |
9 | 6 |
10 | 6.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