RabbitMQ
标签(空格分隔): 未分类
安装RabbitMQ
安装 Erlang
Erlang依赖库:
GCC 编译使用
Ncurses 可以在Linux终端中写出字符用户界面的一个库
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。
yum -y install make gcc gcc-c++ kernel-devel ncurses-devel openssl openssl-devel
1
2
3
4
编译安装Erlang
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
1
2
3
4
5
6
配置环境变量
vim /etc/profile
#追加如下内容:
export PATH=$PATH:/usr/local/erlang/bin
使其生效
source /etc/profile
1
2
3
4
5
6
安装RabbitMQ
你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构系统的不同进程间相互调用、通讯的问题而苦恼、挣扎?如果是,那么恭喜你,消息服务让你可以很轻松地解决这些问题。消息服务擅长于解决多系统、异构系统间的数据交换(消息通知/通讯)问题,你也可以把它用于系统间服务的相互调用(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
1
2
3
4
5
6
7
设置日志与消息持久化目录
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
1
2
3
4
5
启动
操作命令**
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
增加到服务并且设置开机启动
chmod +x /etc/init.d/rabbitmq-server
chkconfig --add rabbitmq-server
chkconfig rabbitmq-server on
1
2
3
安装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 ".*" ".*" ".*"
创建了用户名/密码:test/test
最后成功登录
Web插件的使用
添加新授权用户
添加 Host(如下图所示)
给添加的 Host 设置权限(如下图所示)
交换机绑定队列(如下图所示)
安装RabbitMQ扩展
安装PHP扩展 amqp
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–>
安装rabbitmq-c依赖包
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
安装amqp扩展
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
写个测试脚本:
<?php
$cnn = new AMQPConnection();
$cnn->setHost('127.0.0.1');
$cnn->setLogin('guest');
$cnn->setPassword('guest');
if($cnn->connect()){
echo '连接成功';
}
?>
---------------------
作者:高玉龙
来源:CSDN
原文:https://blog.csdn.net/gao_yu_long/article/details/76021521
版权声明:本文为博主原创文章,转载请附上博文链接!