标签(空格分隔): 未分类
GCC 编译使用
Ncurses 可以在Linux终端中写出字符用户界面的一个库
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
yum -y install make gcc gcc-c++ kernel-devel ncurses-devel openssl openssl-devel
cd /usr/local/src
wget -c http://www.erlang.org/download/otp_src_R16B03.tar.gz
tar -xzvf ./otp_src_R16B03.tar.gz
cd ./otp_src_R16B03
./configure --prefix=/usr/local/erlang --with-ssl -enable-threads -enable-smmp-support -enable-kernel-poll --enable-hipe --without-javac
make && make install
配置环境变量
vim /etc/profile
#追加如下内容:
export PATH=$PATH:/usr/local/erlang/bin
使其生效
source /etc/profile
你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用、通讯的问题而苦恼、挣扎?如果是,那么恭喜你,消息服务让你可以很轻松地解决这些问题。消息服务擅长于解决多系统、异构系统间的数据交换(消息通知/通讯)问题,你也可以把它用于系统间服务的相互调用(RPC)。本文将要介绍的RabbitMQ就是当前最主流的消息中间件之一。
AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。
AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。
RabbitMQ是一个开源的AMQP实现,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。网站在: http://www.rabbitmq.com/ 上面有各种语言教程和实例代码
安装依赖
xmlto包是前端一个XSL工具链。它为您需要的转换选择适当的样式表,并使用外部XSLT处理器应用它。它还执行任何必要的后处理。
yum -y install xmlto
cd /usr/local/src
wget -c http://www.rabbitmq.com/releases/rabbitmq-server/v3.4.3/rabbitmq-server-3.4.3.tar.gz
tar -xzvf ./rabbitmq-server-3.4.3.tar.gz``
cd rabbitmq-server-3.4.3``
make
make install TARGET_DIR=/usr/local/rabbitmq SBIN_DIR=/usr/local/rabbitmq/sbin MAN_DIR=/usr/local/rabbitmq/man DOC_INSTALL_DIR=/usr/local/rabbitmq/doc
设置日志与消息持久化目录
mkdir /var/log/rabbitmq
mkdir /var/lib/rabbitmq
ln -s /usr/local/rabbitmq/sbin/rabbitmq-server /usr/bin/rabbitmq-server
ln -s /usr/local/rabbitmq/sbin/rabbitmq-env /usr/bin/rabbitmq-env
ln -s /usr/local/rabbitmq/sbin/rabbitmqctl /usr/bin/rabbitmqctl
启动
操作命令**
rabbitmq-server start &
启动rabbitmq
rabbitmqctl status
查看状态
rabbitmqctl stop
关闭rabbitmq
增加守护进程脚本
vi /etc/init.d/rabbitmq-server
增加以下内容
#!/bin/sh
#
# rabbitmq-server RabbitMQ broker
#
# chkconfig: - 80 05
# description: Enable AMQP service provided by RabbitMQ
#
### BEGIN INIT INFO
# Provides: rabbitmq-server
# Required-Start: $remote_fs $network
# Required-Stop: $remote_fs $network
# Description: RabbitMQ broker
# Short-Description: Enable AMQP service provided by RabbitMQ broker
### END INIT INFO
# Source function library.
. /etc/rc.d/init.d/functions
export HOME=/root
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/erlang/bin
NAME=rabbitmq-server
DAEMON=/usr/local/rabbitmq/sbin/${NAME}
CONTROL=/usr/local/rabbitmq/sbin/rabbitmqctl
DESC=rabbitmq-server
USER=root
INIT_LOG_DIR=/var/log/rabbitmq
PID_FILE=/var/run/rabbitmq/pid
START_PROG="daemon"
LOCK_FILE=/var/lock/subsys/$NAME
test -x $DAEMON || exit 0
test -x $CONTROL || exit 0
RETVAL=0
set -e
[ -f /etc/default/${NAME} ] && . /etc/default/${NAME}
ensure_pid_dir () {
PID_DIR=`dirname ${PID_FILE}`
if [ ! -d ${PID_DIR} ] ; then
mkdir -p ${PID_DIR}
chown -R ${USER}:${USER} ${PID_DIR}
chmod 755 ${PID_DIR}
fi
}
remove_pid () {
rm -f ${PID_FILE}
rmdir `dirname ${PID_FILE}` || :
}
start_rabbitmq () {
status_rabbitmq quiet
if [ $RETVAL = 0 ] ; then
echo RabbitMQ is currently running
else
RETVAL=0
ensure_pid_dir
set +e
RABBITMQ_PID_FILE=$PID_FILE $START_PROG $DAEMON \
> "${INIT_LOG_DIR}/startup_log" \
2> "${INIT_LOG_DIR}/startup_err" \
0<&- &
$CONTROL wait $PID_FILE >/dev/null 2>&1
RETVAL=$?
set -e
case "$RETVAL" in
0)
echo SUCCESS
if [ -n "$LOCK_FILE" ] ; then
touch $LOCK_FILE
fi
;;
*)
remove_pid
echo FAILED - check ${INIT_LOG_DIR}/startup_\{log, _err\}
RETVAL=1
;;
esac
fi
}
stop_rabbitmq () {
status_rabbitmq quiet
if [ $RETVAL = 0 ] ; then
set +e
$CONTROL stop ${PID_FILE} > ${INIT_LOG_DIR}/shutdown_log 2> ${INIT_LOG_DIR}/shutdown_err
RETVAL=$?
set -e
if [ $RETVAL = 0 ] ; then
remove_pid
if [ -n "$LOCK_FILE" ] ; then
rm -f $LOCK_FILE
fi
else
echo FAILED - check ${INIT_LOG_DIR}/shutdown_log, _err
fi
else
echo RabbitMQ is not running
RETVAL=0
fi
}
status_rabbitmq() {
set +e
if [ "$1" != "quiet" ] ; then
$CONTROL status 2>&1
else
$CONTROL status > /dev/null 2>&1
fi
if [ $? != 0 ] ; then
RETVAL=3
fi
set -e
}
rotate_logs_rabbitmq() {
set +e
$CONTROL rotate_logs ${ROTATE_SUFFIX}
if [ $? != 0 ] ; then
RETVAL=1
fi
set -e
}
restart_running_rabbitmq () {
status_rabbitmq quiet
if [ $RETVAL = 0 ] ; then
restart_rabbitmq
else
echo RabbitMQ is not runnning
RETVAL=0
fi
}
restart_rabbitmq() {
stop_rabbitmq
start_rabbitmq
}
if [ ! -d $INIT_LOG_DIR ]; then
mkdir $INIT_LOG_DIR
fi
case "$1" in
start)
echo -n "Starting $DESC: "
start_rabbitmq
echo "$NAME."
;;
stop)
echo -n "Stopping $DESC: "
stop_rabbitmq
echo "$NAME."
;;
status)
status_rabbitmq
;;
rotate-logs)
echo -n "Rotating log files for $DESC: "
rotate_logs_rabbitmq
;;
force-reload|reload|restart)
echo -n "Restarting $DESC: "
restart_rabbitmq
echo "$NAME."
;;
try-restart)
echo -n "Restarting $DESC: "
restart_running_rabbitmq
echo "$NAME."
;;
*)
echo "Usage: $0 {start|stop|status|rotate-logs|restart|condrestart|try-restart|reload|force-reload}" >&2
RETVAL=1
;;
esac
exit $RETVAL
增加到服务并且设置开机启动
chmod +x /etc/init.d/rabbitmq-server
chkconfig --add rabbitmq-server
chkconfig rabbitmq-server on
安装Web插件管理界面
cd /usr/local/rabbitmq/sbin
mkdir /etc/rabbitmq
./rabbitmq-plugins enable rabbitmq_management
//查看插件列表
./rabbitmq-plugins list
在服务器使用浏览器访问http://127.0.0.1:15672
登陆,默认用户名和密码都是guest,登陆成功!
浏览器访问http://192.168.0.28:15672,如果出现无法访问的情况。
开放防火墙端口:
iptables -I INPUT -p tcp -m tcp --dport 15672 -j ACCEPT
iptables -I INPUT -p tcp -m tcp --dport 5672 -j ACCEPT
service iptables save
service iptables restart
输入用户名密码 guest/guest 发现不能登录
原来从 rabbitmq 3.3.0 之后不能以 guest/guest 登录了(本机可以)
两种解决方案
- 更改文件配置
- 复制默认配置:cp /usr/local/rabbitmq/doc/rabbitmq.config.example /etc/rabbitmq/
- 修改配置文件名: cd /etc/rabbitmq ; mv rabbitmq.config.example rabbitmq.config
- 编辑配置文件,开启用户远程访问:vim rabbitmq.config
- 在 64 行,默认有这样一句话:%%{loopback_users,[<<”guest”>>]},,注意,该语句最后有一个逗号,等下是要去掉的我们需要改为:{loopback_users, []}
- rabbitmqctl stop
- rabbitmq-server start
rabbitmqctl add_user test test
rabbitmqctl set_user_tags test administrator
rabbitmqctl set_permissions -p / test ".*" ".*" ".*"
Web插件的使用
cd /usr/local/src
wget http://pecl.php.net/get/amqp-1.9.1.tgz
tar zxvf amqp-1.9.1.tgz
cd amqp-1.9.1
/usr/local/php/bin/phpize
可能会出现错误信息
FATAL ERROR: Autoconf version 2.59 or higher is required for this script
删除旧版本:
rpm -e --nodeps autoconf
安装新版本autoconf
cd /usr/local/src
wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
tar -xzf autoconf-2.69.tar.gz
cd autoconf-2.69
./configure
make && make install
–>
yum install autoconf automake libtool
cd /usr/local/src
wget https://codeload.github.com/alanxz/rabbitmq-c/tar.gz/master -O rabbitmq-c.tar.gz
tar zxvf rabbitmq-c.tar.gz
cd rabbitmq-c-master
autoreconf -i
./configure --prefix=/usr/local/rabbitmq-c
结果如下:
rabbitmq-c build options:
Host: x86_64-unknown-linux-gnu
Version: 0.8.1
SSL/TLS: openssl
Tools: no
Documentation: no
Examples: yes
make && make install
cd /usr/local/src
wget https://pecl.php.net/get/amqp-1.8.0.tgz
tar zxvf amqp-1.8.0.tgz
cd amqp-1.8.0
/usr/local/php/bin/phpize
可能会出现错误信息
FATAL ERROR: Autoconf version 2.59 or higher is required for this script
删除旧版本:
rpm -e --nodeps autoconf
安装新版本autoconf
cd /usr/local/src
wget http://ftp.gnu.org/gnu/autoconf/autoconf-2.69.tar.gz
tar -xzf autoconf-2.69.tar.gz
cd autoconf-2.69
./configure
make && make install
然后继续安装
cd /usr/local/src/amqp-1.8.0
/usr/local/php/bin/phpize
./configure --with-php-config=/usr/local/php/bin/php-config --with-amqp --with-librabbitmq-dir=/usr/local/rabbitmq-c/
make && make install
增加php配置
vim /usr/local/php/etc/php.ini
增加
[rabbitmq]
extension=amqp.so
service httpd restart
或者
service php-fpm restart
写个测试脚本:
$cnn = new AMQPConnection();
$cnn->setHost('127.0.0.1');
$cnn->setLogin('guest');
$cnn->setPassword('guest');
if($cnn->connect()){
echo '连接成功';
}
?>
参考文章:
CentOS6.3编译安装 Erlang 和 RabbitMQ3.4.3
RabbitMQ 安装和配置
Centos安装rabbitmq的php扩展php-amqp
RabbitMQ+PHP 消息队列环境配置
安装rabbitmq和php扩展
安装rabbitmq
Centos安装rabbitmq的php扩展
rabbitmq php扩展amqp安装
CentOS6.3编译安装 Erlang 和 RabbitMQ3.4.3