近日心血来潮在vmware虚拟机 装了centos7 ,测试安装体验了一把RabbitMQ(我安装的版本是3.7.6) ,过程比较坎坷,记录备忘(主要操作步骤参考:https://www.rabbitmq.com/install-rpm.html)
一、安装ErLang
yum install erlang正常来讲 这样应该就安装好了。。。可能因为我的centos是最小化安装的原因 一直提示缺少各种依赖,最后根据官网的 Zero-dependency Erlang from RabbitMQ安装成功 具体如下:
To use Erlang 20.x on CentOS 7:
# In /etc/yum.repos.d/rabbitmq-erlang.repo [rabbitmq-erlang] name=rabbitmq-erlang baseurl=https://dl.bintray.com/rabbitmq/rpm/erlang/20/el/7 gpgcheck=1 gpgkey=https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc repo_gpgcheck=0 enabled=1
保存 退出 再执行 yum install erlang 成功
二、安装RabbitMQ Server
下载:
wget https://dl.bintray.com/rabbitmq/all/rabbitmq-server/3.7.6/rabbitmq-server-3.7.6-1.el7.noarch.rpm
(需要root权限)
rpm --import https://dl.bintray.com/rabbitmq/Keys/rabbitmq-release-signing-key.asc # this example assumes the CentOS 7 version of the package yum install rabbitmq-server-3.7.6-1.el7.noarch.rpm
启动:/sbin/service rabbitmq-server start 停止:/sbin/service rabbitmq-server stop 重启:/sbin/service rabbitmq-server restart 开机启动:chkconfig rabbitmq-server on
四、配置
cd /etc/rabbitmq cp /usr/share/doc/rabbitmq-server-3.7.6/rabbitmq.config.example /etc/rabbitmq/ mv rabbitmq.config.example rabbitmq.config
设置用户远程访问:
找到这一行 去掉%%和后面的逗号保存 然后重启MQrabbitmq默认创建的用户guest,密码也是guest,这个用户默认只能是本机访问,localhost或者127.0.0.1,从外部访问需要添加上面的配置
五、开启web界面管理工具
rabbitmq-plugins enable rabbitmq_management service rabbitmq-server restart
访问:http://ip:56762/
最后:记得放开防火墙的端口:
firewall-cmd --zone=public --permanent --add-port=5672/tcp firewall-cmd --zone=public --permanent --add-port=15672/tcp firewall-cmd --reload
或者
/sbin/iptables -I INPUT -p tcp --dport 5672 -j ACCEPT /sbin/iptables -I INPUT -p tcp --dport 15672 -j ACCEPT
六、PHP连接测试
利用官网提供的类库php-amqplib
在项目comoposer添加
{"require": {"php-amqplib/php-amqplib":">=2.6.1"} }
然后:
composer install
下面是测试代码:
Send(https://github.com/rabbitmq/rabbitmq-tutorials/blob/master/php/send.php):
<?php require_once './../../vendor/autoload.php'; use PhpAmqpLib\Connection\AMQPStreamConnection; use PhpAmqpLib\Message\AMQPMessage; $connection = new AMQPStreamConnection('10.0.200.64', 5672, 'guest', 'guest'); $channel = $connection->channel(); $channel->queue_declare('hello', false, false, false, false); $msg = new AMQPMessage('Hello World2!'); $channel->basic_publish($msg, '', 'hello'); echo " [x] Sent 'Hello World!'\n"; $channel->close(); $connection->close();
receive(https://github.com/rabbitmq/rabbitmq-tutorials/blob/master/php/receive.php):
<?php require_once './../../vendor/autoload.php'; use PhpAmqpLib\Connection\AMQPStreamConnection; $connection = new AMQPStreamConnection('10.0.200.64', 5672, 'guest', 'guest'); $channel = $connection->channel(); $channel->queue_declare('hello', false, false, false, false); echo " [*] Waiting for messages. To exit press CTRL+C\n"; $callback = function ($msg) { echo ' [x] Received ', $msg->body, "\n"; }; $channel->basic_consume('hello', '', false, true, false, false, $callback); while (count($channel->callbacks)) { $channel->wait(); } $channel->close(); $connection->close();
分别运行:php send.php和php receive.php
应该有如下截图: