RabbitMQ是什么?
官方的介绍:
The RabbitMQ server is an implementation of an AMQP broker. It is written on top of the widely-used Open Telecom Platform , and is platform neutral; the binary distributions listed below differ only in how they are packaged to conform to various operating systems' packaging conventions.
官方的安装指南:
http://www.rabbitmq.com/install.html
说明:
MQ全称为Message Queue, 消息队列(MQ)是端到端解耦的通信方法,数据结构采用先进先出(FIFO)的Queue队列模型。MQ的消费-生产者模型的一个典型的代表,一端往消息队列中不断的写入消息,而另一端则可以读取或者订阅队列中的 消息。最常见MQ是JMS的消息队列中间件,随J2EE而出名。RabbitMQ和JMS类似,但不同的是JMS是SUN JAVA消息中间件服务的一个标准和API定义,而RabbitMQ则是遵循了AMQP 协议的具体实现和产品。AMQP是跨语言跨平台的,本身是种标准。JMS一般只有Java语言支持。现有常见的开源MQ有Apache ActiveMQ,Apache QPID和OpenMQ,以及RabbitMQ。其它的有JMS的消息中间件一般由IBM、Oracle等巨头实现。
RabbitMQ的安装
在Windows下安装最容易,下载rabbitmq-server-windows-1.8.0.zip ,先安装Erlang的运行时,接着运行Sbin目录下的rabbitmq-service.bat即可将RabbitMQ注册为标准的Windows服务。如果不想作为服务而是作为普通的应用程序运行,可以运行rabbitmq-server.bat。停止可以 rabbitmqctl stop command。
在Debian和Ubuntu上,可安装rabbitmq-server_1.8.0-1_all.deb ,如果在RedHat(Fedora)上可安装rabbitmq-server-1.8.0-1.noarch.rpm ,如果是SUSE,则可安装 rabbitmq-server-1.8.0-1.suse.noarch.rpm 。
通用的Unix(Linux)安装包为 rabbitmq-server-generic-unix-1.8.0.tar.gz ,下载即可在Sbin里运行。
CentOS的安装
一般,安装RabbitMQ 需要4个步骤:
- Python JSON
- JDK
- Erlang
- RabbitMQ
1. 通过YUM安装
RabbitMQ是由Erlang语言实现的,所以在安装RabbitMQ之前,应该安装Erlang:
yum install erlang。
Erlang有部分代码依赖JDK。如果Erlang安装过程有发现有Java类似的错误,应该安装JDK的最新版,可参见Linux下Java环境的安装 。用YUM安装可自动安装所有RabbitMQ依赖的库文件。是最方便的安装方式。
yum install rabbitmq-server
如果所在机器没有“rabbitmq-server”的可用安装包,建议先安装加速包:
yum -y install yum-fastestmirror
接着就近添加yum的源服务器地址,其中技巧可参见CentOS yum源设定使用方法的整理 。
然后,在https://admin.fedoraproject.org/updates/rabbitmq-server可查看现有的RabbitMQ的安装包。
=========================================
FEDORA-EPEL-2010-2351 | rabbitmq-server-1.7.2-1.el5 | Fedora EPEL 5 |
FEDORA-EPEL-2009-0841 | rabbitmq-server-1.7.0-1.el5 | Fedora EPEL 5 |
FEDORA-EPEL-2009-0312 | rabbitmq-server-1.6.0-1.el5 | Fedora EPEL 5 |
=========================================
截止到2010年7月2日,只有最新1.7.2的RabbitMQ安装包。1.8.0是测试包。下列是yum的常见命令:
- 在线升级: yum upgrade rabbitmq-server
- 在线检查新版本: yum check-update rabbitmq-server 或者 yum update rabbitmq-server
- 删除: yum remove rabbitmq-server
2. 通过通用Unix(Linux)安装包安装
2.1安装PythonJSON包
先安装Python,yum install python 。 用wget下载 http://pypi.python.org/packages/source/s/simplejson/ 最新的安装包
wget "http://pypi.python.org/packages/source/s/simplejson/simplejson-2.1.1.tar.gz"
tar zxvf simplejson-2.1.1.tar.gz
cd simplejson-2.1.1
python setup.py build
python setup.py install
2.2安装JDK,参见 Linux下Java环境的安装
2.3安装Erlang
安装Erlang前要安装 JDK,以及yum install unixODBC和yum install unixODBC-devel,也就是unixODBC和unixODBC-devel。
然后wget从http://erlang.org/download.html下载最新的版本,安装编译。这步可能比较麻烦,如果有可能还是想法用YUM或者RPM安装最省事。
wget "http://erlang.org/download/otp_src_R13B04.tar.gz"
tar zxvf otp_src_R13B04.tar.gz
cd otp_src_R13B04
make && make install
2.4安装RabbitMQ
用wget下载rabbitmq-server-1.8.0.tar.gz 。注意如果下载rabbitmq-server-generic-unix-1.8.0.tar.gz ,则无需编译即可运行。
wget "http://www.rabbitmq.com/releases/rabbitmq-server/v1.8.0/rabbitmq-server-1.8.0.tar.gz"
tar zxvf rabbitmq-server-generic-unix-1.8.0.tar.gz
cd rabbitmq_server-1.8.0
make && make install
3. 启动RabbitMQ
编译成功后:在RabbitMQ文件里会有一个sbin文件夹。这个文件夹包括:
- rabbitmq-server 启动RabbitMQ
- rabbitmqctl 控制RabbitMQ,可启动、停止、重启、配置用户、权限、查看队列信息等
- rabbitmq-multi 后台启动RabbitMQ程序
- rabbitmq-deactivate-plugins
- rabbitmq-activate-plugins
- rabbitmq-env
通过这些程序就可以正式启动RabbitMQ。想要全局调用这些命令,可以CP拷贝这些命令到 /usr/sbin 目录里。如果想在操作系统重启后,仍然能正常启动RabbitMQ,则需要在
/etc/rc.d/init.d/
添加一个自启动的脚本如rabbitmq。设置该脚本可执行: chmod +x rabbitmq。该脚本如下:
#!/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
# Default-Start:
# Default-Stop:
# Description: RabbitMQ broker
# Short-Description: Enable AMQP service provided by RabbitMQ broker
### END INIT INFO
PATH=/sbin:/usr/sbin:/bin:/usr/bin
########### 修改路径 ###########
DAEMON=/usr/sbin/rabbitmq-multi
NAME=rabbitmq-server
DESC=rabbitmq-server
USER=rabbitmq
NODE_COUNT=1
ROTATE_SUFFIX=
INIT_LOG_DIR=/var/log/rabbitmq
DEFAULTS_FILE=/etc/sysconfig/rabbitmq
LOCK_FILE=/var/lock/subsys/$NAME
test -x $DAEMON || exit 0
# Include rabbitmq defaults if available
if [ -f "$DEFAULTS_FILE" ] ; then
. $DEFAULTS_FILE
fi
RETVAL=0
set -e
start_rabbitmq () {
set +e
$DAEMON start_all ${NODE_COUNT} > ${INIT_LOG_DIR}/startup_log 2> ${INIT_LOG_DIR}/startup_err
case "$?" in
0)
echo SUCCESS
[ -n "$LOCK_FILE" ] && touch $LOCK_FILE
RETVAL=0
;;
1)
echo TIMEOUT - check ${INIT_LOG_DIR}/startup_/{log,err/}
RETVAL=1
;;
*)
echo FAILED - check ${INIT_LOG_DIR}/startup_log, _err
RETVAL=1
;;
esac
set -e
}
stop_rabbitmq () {
set +e
status_rabbitmq quiet
if [ $RETVAL = 0 ] ; then
$DAEMON stop_all > ${INIT_LOG_DIR}/shutdown_log 2> ${INIT_LOG_DIR}/shutdown_err
RETVAL=$?
if [ $RETVAL = 0 ] ; then
# Try to stop epmd if run by the rabbitmq user
pkill -u rabbitmq epmd || :
[ -n "$LOCK_FILE" ] && rm -rf $LOCK_FILE
else
echo FAILED - check ${INIT_LOG_DIR}/shutdown_log, _err
fi
else
echo No nodes running
RETVAL=0
fi
set -e
}
status_rabbitmq() {
set +e
if [ "$1" != "quiet" ] ; then
$DAEMON status 2>&1
else
$DAEMON status > /dev/null 2>&1
fi
if [ $? != 0 ] ; then
RETVAL=1
fi
set -e
}
rotate_logs_rabbitmq() {
set +e
$DAEMON rotate_logs ${ROTATE_SUFFIX}
if [ $? != 0 ] ; then
RETVAL=1
fi
set -e
}
restart_rabbitmq() {
stop_rabbitmq
start_rabbitmq
}
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|condrestart|try-restart)
echo -n "Restarting $DESC: "
restart_rabbitmq
echo "$NAME."
;;
*)
echo "Usage: $0 {start|stop|status|rotate-logs|restart|condrestart|try-restart|reload|force-reload}" >&2
RETVAL=1
;;
esac
exit $RETVAL
然后用 rabbitmq start 就可启动了。用 rabbitmq stop 可停止。
自此,安装启动完毕!