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

編譯安裝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
 配置環境變量
vim /etc/profile
#追加如下內容:
export PATH=$PATH:/usr/local/erlang/bin
使其生效
source /etc/profile

安裝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

設置日誌與消息持久化目錄

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 ".*" ".*" ".*"
    創建了用戶名/密碼:test/test
    最後成功登錄

Web插件的使用

  • 添加新授權用戶添加新授權用戶(如下圖所示)
  • 添加 Host(如下圖所示)添加 Host(如下圖所示)
  • 給添加的 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 '連接成功';
}
?>

參考文章:
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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章