环境:Linux CentOS7.2,服务器在装消息队列之前,装了WDCP管理面板和Workerman。
消息队列选择的是RabbitMQ,在网上搜索了一些教程,按照教程安装,但是在编译的时候还是遇到了各种各样的问题,现在整理如下:
一、首先参考网上的教程安装erlang&rabbitmq
1. 安装 erlang
1.1 准备工作,先安装依赖库
yum -y install make gcc gcc-c++ kernel-devel m4 ncurses-devel openssl-devel
yum install ncurses-devel
1.2 下载erlang源码
wget http://www.erlang.org/download/otp_src_R16B02.tar.gz
cp otp_src_R16B02.tar.gz /usr/src/otp_src_R16B02.tar.gz
cd /usr/src
tar -xzvf otp_src_R16B02.tar.gz
mv otp_src_R16B02 erlang_R16B
1.3 编译安装
cd erlang_R16B/
./configure --prefix=/usr/local/erlang --with-ssl --enable-threads --enable-smp-support --enable-kernel-poll --enable-hipe --without-javac //不用java编译,故去掉java避免错误
make && make install //编译后安装
1.4 配置环境变量
vi /etc/profile
ERL_HOME=/usr/local/erlang
export PATH=$PATH:$ERL_HOME/bin
2 安装rabbitmq
2.1 下载
wget http://www.rabbitmq.com/releases/rabbitmq-server/v3.1.5/rabbitmq-server-3.1.5.tar.gz
cp rabbitmq-server-3.1.5.tar.gz /usr/src
cd /usr/src
tar -xzvf rabbitmq-server-3.1.5.tar.gz
2.2 安装依赖库
yum -y install xmlto
否则会编译不通过:
/bin/sh: line 1: xmlto: command not found
2.3 编译
cd rabbitmq-server-3.1.5
make
make install TARGET_DIR=/usr/local/rabbitmq SBIN_DIR=/usr/local/rabbitmq/sbin MAN_DIR=/usr/local/rabbitmq/man //将rabbitmq编译到/opt/mq/rabbitmq目录
2.4 安装web插件管理界面
cd /usr/local/rabbitmq/sbin
mkdir /etc/rabbitmq/
./rabbitmq-plugins enable rabbitmq_management
查看插件列表
./rabbitmq-plugins list
2.5 常用命令
启动rabbitmq
./rabbitmq-server -detached
在浏览器上输入http://127.0.0.1:15672/登录管理界面了
使用登录的名户名和密码默认都算guest
关闭rabbitmq
./rabbitmqctl stop
以上是参考:https://www.cnblogs.com/balaamwe/p/3678527.html
按照上面安装,在第一步安装 erlang时,没有什么问题。第二步安装rabbitmq时,在编译的时候开始遇到各种报错,总结如下:
1、需要安装xmlto命令
没有会报错:
/bin/sh: line 1: xmlto: command not found
使用yum命令去网络安装这个命令
yum install xmlto
2、make erl command not found
安装脚本会用到erl命令。erl就是erlange的简写。在安装脚本中,使用的命令是erl。默认是去/usr/bin/erl下寻找。由于,前面编译安装erlange的时候,使用--prefix参数,将erlang安装到了指定的目录了,而不是使用默认的路径。但是这会导致后面 rabbitMQ报错:找不到erl 执行文件。解决办法:
sudo ln -s /usr/local/erlang/bin/erl /usr/bin/erl
3、
/bin/sh: escript: command not found
解决办法:
sudo ln -s /usr/local/erlang/bin/escript /usr/sbin/escript
4、make: erlc: Command not found
解决办法:
sudo ln -s /usr/local/erlang/bin/erlc /usr/bin/erlc
以上参考:http://www.it610.com/article/3873857.htm
在编译过程中,除了以上问题外,我还遇到了以下问题
5. bash: nc: command not found
解决办法:在线安装
yum install -y nc
6. unzip/zip: Command Not Found
解决办法:在线安装
yum install -y unzip zip
好了,到此为止,编译算是可以顺利进行了,编译完成后,该启动rabbitmq了。启动的时候又开始报以下错误了
rabbitmq 无法启动 Warning: PID file not written
查了好久,没找到具体解决办法,最后不管了,访问一下web面板看看,结果居然可以访问。好吧,这个问题不用理会,可以正常运行。现在rabbitmq算是安装完成了,下面是把开发的PHP代码放到服务器上,然后启动进程。
在启动PHP进程的时候,又开始报错了,说是我当前的zend版本太低,让我升级成Zend Guard Loader。
升级zend
1、解压
wget http://downloads.zend.com/guard/7.0.0/zend-loader-php5.6-linux-x86_64_update1.tar.gz
tar -zxvf ZendGuardLoader-70429-PHP-5.4-linux-glibc23-x86_64.tar.gz
cd ZendGuardLoader/ #进入解压后的目录
2、开始安装
复制对应PHP版本文件夹下的 ZendGuardLoader.so 到PHP安装目录(我安装的是WDCP面板,php安装目录:/www/wdlinux/apache_php-5.5.38/etc)
cp ZendGuardLoader.so /www/wdlinux/apache_php-5.5.38/etc
编辑php配置文件.在 php.ini 文件末尾添加几行配置项.
zend_extension=/etc/httpd/modules/ZendGuardLoader.so
zend_loader.enable=1
zend_loader.disable_licensing=0
zend_loader.obfuscation_level_support=3
zend_loader.license_path=
重启 Apache 或 Nginx
service httpd restart
好啦,到此,所有准备工作都做完了,可以启动php进程了
/www/wdlinux/apache_php-5.5.38/bin/php /home/rabbitmq/consumer.php -start
Zend Guard下载网址:https://www.zend.com/en/products/loader/downloads#Linux