一:rabbitMQ安装
1、erlang安装
curl -s https://packagecloud.io/install/repositories/rabbitmq/erlang/script.rpm.sh | sudo bash
yum install -y erlang
2、2.RabbitMQ安装
导入将于2018年12月1日起使用的新PackageCloud密钥(GMT),完成RabbitMQ的前置条件配置
rpm --import https://packagecloud.io/rabbitmq/rabbitmq-server/gpgkey
执行云存储库快速脚本
curl -s https://packagecloud.io/install/repositories/rabbitmq/rabbitmq-server/script.rpm.sh | sudo bash
安装
yum install rabbitmq-server -y
或者下载rabbitmq-server-3.8.9-1.el7.noarch.rpm到服务器,yum install -y rabbitmq-server-3.8.9-1.el7.noarch.rpm
3、php扩展 php-amqplib安装
wget https://pecl.php.net/get/amqp-2.1.1.tgz
tar zxvf amqp-amqp-2.1.1.tgz
cd amqp-amqp-2.1.1
/usr/local/php/bin/phpize
./configure --with-php-config=/www/server/php/73/bin/php-config --with-amqp
make
make install
vim /usr/local/php/etc/php.ini
extension=amqp
php扩展 php-amqplib安装
composer require php-amqplib/php-amqplib
//如果是window php.ini添加扩展
extension=php_amqp.dll
window下安装如果报错,提示需要安装ampq 扩展,pecl.php.net/package/amq… 选择和php版本匹配的文件下载,下载后php_amqp.dll
放到php的ext,rabbitmq.4.dll
放到php目录下,即和php.exe在一个目录,同时需要开启sockets
扩展
4、rabbitmq 启动与开机自启动
systemctl start rabbitmq-server.service 启动
systemctl status rabbitmq-server.service 状态
systemctl stop rabbitmq-server.service 停止
systemctl restart rabbitmq-server.service 重启
systemctl enable rabbitmq-server.service 设置开启自启动
5、启用管理后台
rabbitmq-plugins enable rabbitmq_management
6、配置权限
chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/
7、增加用户
rabbitmqctl add_user admin 123456
//有报错提示可以不管
8、设置角色
rabbitmqctl set_user_tags admin administrator
9、设置用户权限
rabbitmqctl set_permissions -p / admin '.*' '.*' '.*'
10、查看用户
rabbitmqctl list_users
11、放开防火墙端口号5672和15672或者关闭防火墙 登录web端可以看到rabbitmq登录页面
ip:15672
二:rabbitmq_delayed_message_exchange 延时插件安装
找到相应的版本下载
把下载下来的插件上传到rebbit插件目录如:/usr/lib/rabbitmq/lib/rabbitmq_server-3.10.6/plugins
启用插件
rabbitmq-plugins enable rabbitmq_delayed_message_exchange
查看插件列表
rabbitmq-plugins list
安装成功,多一个type为x-delayed-message
代码实现
public function testProducer(){
$rabbit = new RabbitMQ();
$queueName = 'test-producer';
$rabbit->producer($queueName,'aaa');
}
public function testConsumer(){
$rabbit = new RabbitMQ();
$queueName = 'test-producer';
$callback = function ($message) {
$data = json_decode($message->body,true);
logging('test','test','bbb');
$message->delivery_info['channel']->basic_ack($message->delivery_info['delivery_tag']); //ack
};
$rabbit->consumeMessage($queueName, $callback);
}
public function testDelayQueue(){
$rabbit = new RabbitMQ();
$queueName = 'test-delay';
$rabbit->createDelay($queueName);
$rabbit->sendDelayMessage("this is a delay test",$queueName,$queueName,5);
}
public function delay_consumer(){
$rabbit = new RabbitMQ();
$queueName = 'test-delay';
$callback = function ($message) {
var_dump("Received Message : " . $message->body);
$message->delivery_info['channel']->basic_ack($message->delivery_info['delivery_tag'], false);
};
$rabbit->consumeDelayMessage($queueName, $callback);
}