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 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值