安装 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'),
'exchange_declare' => env('RABBITMQ_EXCHANGE_DECLARE', true),
'queue_declare_bind' => env('RABBITMQ_QUEUE_DECLARE_BIND', true),
'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'),
'passive' => env('RABBITMQ_EXCHANGE_PASSIVE', false),
'durable' => env('RABBITMQ_EXCHANGE_DURABLE', true),
'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
RABBITMQ_PASSWORD = admin
RABBITMQ_QUEUE = test
其他和正常跑队列区别不大
php artisan queue:restart
php artisan queue:work
|