RabbitMQ安装及PHP扩展安装(最后的代码可以测试连接是否成功)
RabbitMQ
標(biāo)簽(空格分隔): 未分類
安裝RabbitMQ
安裝 Erlang
Erlang依賴庫:
GCC 編譯使用
Ncurses 可以在Linux終端中寫出字符用戶界面的一個(gè)庫
OpenSSL 是一個(gè)強(qiáng)大的安全套接字層密碼庫,囊括主要的密碼算法、常用的密鑰和證書封裝管理功能及SSL協(xié)議,并提供豐富的應(yīng)用程序供測(cè)試或其它目的使用。
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
?配置環(huán)境變量
vim /etc/profile
#追加如下內(nèi)容:
export PATH=$PATH:/usr/local/erlang/bin
使其生效
source /etc/profile
1
2
3
4
5
6
安裝RabbitMQ
你是否遇到過兩個(gè)(多個(gè))系統(tǒng)間需要通過定時(shí)任務(wù)來同步某些數(shù)據(jù)?你是否在為異構(gòu)系統(tǒng)的不同進(jìn)程間相互調(diào)用、通訊的問題而苦惱、掙扎?如果是,那么恭喜你,消息服務(wù)讓你可以很輕松地解決這些問題。消息服務(wù)擅長于解決多系統(tǒng)、異構(gòu)系統(tǒng)間的數(shù)據(jù)交換(消息通知/通訊)問題,你也可以把它用于系統(tǒng)間服務(wù)的相互調(diào)用(RPC)。本文將要介紹的RabbitMQ就是當(dāng)前最主流的消息中間件之一。?
AMQP,即Advanced Message Queuing Protocol,高級(jí)消息隊(duì)列協(xié)議,是應(yīng)用層協(xié)議的一個(gè)開放標(biāo)準(zhǔn),為面向消息的中間件設(shè)計(jì)。消息中間件主要用于組件之間的解耦,消息的發(fā)送者無需知道消息使用者的存在,反之亦然。?
AMQP的主要特征是面向消息、隊(duì)列、路由(包括點(diǎn)對(duì)點(diǎn)和發(fā)布/訂閱)、可靠性、安全。?
RabbitMQ是一個(gè)開源的AMQP實(shí)現(xiàn),服務(wù)器端用Erlang語言編寫,支持多種客戶端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX。用于在分布式系統(tǒng)中存儲(chǔ)轉(zhuǎn)發(fā)消息,在易用性、擴(kuò)展性、高可用性等方面表現(xiàn)不俗。網(wǎng)站在: http://www.rabbitmq.com/ 上面有各種語言教程和實(shí)例代碼?
安裝依賴?
xmlto包是前端一個(gè)XSL工具鏈。它為您需要的轉(zhuǎn)換選擇適當(dāng)?shù)臉邮奖?#xff0c;并使用外部XSLT處理器應(yīng)用它。它還執(zhí)行任何必要的后處理。
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
設(shè)置日志與消息持久化目錄
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
啟動(dòng)?
操作命令**?
rabbitmq-server start & 啟動(dòng)rabbitmq?
rabbitmqctl status 查看狀態(tài)?
rabbitmqctl stop 關(guān)閉rabbitmq?
增加守護(hù)進(jìn)程腳本?
vi /etc/init.d/rabbitmq-server?
增加以下內(nèi)容
#!/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
增加到服務(wù)并且設(shè)置開機(jī)啟動(dòng)
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?
在服務(wù)器使用瀏覽器訪問http://127.0.0.1:15672?
登陸,默認(rèn)用戶名和密碼都是guest,登陸成功!?
瀏覽器訪問http://192.168.0.28:15672,如果出現(xiàn)無法訪問的情況。?
開放防火墻端口:?
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 發(fā)現(xiàn)不能登錄?
原來從 rabbitmq 3.3.0 之后不能以 guest/guest 登錄了(本機(jī)可以)?
兩種解決方案?
- 更改文件配置?
- 復(fù)制默認(rèn)配置:cp /usr/local/rabbitmq/doc/rabbitmq.config.example /etc/rabbitmq/?
- 修改配置文件名: cd /etc/rabbitmq ; mv rabbitmq.config.example rabbitmq.config?
- 編輯配置文件,開啟用戶遠(yuǎn)程訪問:vim rabbitmq.config?
- 在 64 行,默認(rèn)有這樣一句話:%%{loopback_users,[<<”guest”>>]},,注意,該語句最后有一個(gè)逗號(hào),等下是要去掉的我們需要改為:{loopback_users, []}?
- rabbitmqctl stop?
- rabbitmq-server start
要新增用戶及權(quán)限:?
rabbitmqctl add_user test test?
rabbitmqctl set_user_tags test administrator?
rabbitmqctl set_permissions -p / test ".*" ".*" ".*"?
創(chuàng)建了用戶名/密碼:test/test?
最后成功登錄
Web插件的使用
添加新授權(quán)用戶
添加 Host(如下圖所示)
給添加的 Host 設(shè)置權(quán)限(如下圖所示)
交換機(jī)綁定隊(duì)列(如下圖所示)
安裝RabbitMQ擴(kuò)展
安裝PHP擴(kuò)展 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?
可能會(huì)出現(xiàn)錯(cuò)誤信息?
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?
結(jié)果如下:?
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擴(kuò)展
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?
可能會(huì)出現(xiàn)錯(cuò)誤信息?
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?
然后繼續(xù)安裝?
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?
寫個(gè)測(cè)試腳本:
<?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?
版權(quán)聲明:本文為博主原創(chuàng)文章,轉(zhuǎn)載請(qǐng)附上博文鏈接!
總結(jié)
以上是生活随笔為你收集整理的RabbitMQ安装及PHP扩展安装(最后的代码可以测试连接是否成功)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 姓马的女孩子取什么名字好?
- 下一篇: 白糖驱蚊子小妙招白糖白酒加醋?