RabbitMQ安装及PHP扩展安装(最后的代码可以测试连接是否成功)
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?
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!
總結
以上是生活随笔為你收集整理的RabbitMQ安装及PHP扩展安装(最后的代码可以测试连接是否成功)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 姓马的女孩子取什么名字好?
- 下一篇: 白糖驱蚊子小妙招白糖白酒加醋?