当前位置:首页 > 服务端 > RabbitMQ安装及PHP扩展安装

RabbitMQ安装及PHP扩展安装

2022年09月16日 18:26:02服务端8

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插件的使用

  • 添加新授权用户RabbitMQ安装及PHP扩展安装 _ JavaClub全栈架构师技术笔记
  • 添加 Host(如下图所示)RabbitMQ安装及PHP扩展安装 _ JavaClub全栈架构师技术笔记
  • 给添加的 Host 设置权限(如下图所示)RabbitMQ安装及PHP扩展安装 _ JavaClub全栈架构师技术笔记
  • 交换机绑定队列(如下图所示)RabbitMQ安装及PHP扩展安装 _ JavaClub全栈架构师技术笔记

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

作者:高玉龙
来源链接:https://blog.csdn.net/gao_yu_long/article/details/76021521

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/server/42034.html

分享给朋友:

“RabbitMQ安装及PHP扩展安装” 的相关文章

中间件RabbitMQ

中间件RabbitMQ

一、前言 RabbitMQ在Windows上安装非常简单,就跟日常安装应用聊天软件一样,因此这里选择Linux环境安装RabbitMQ,并且借助Docker容器进行安装,在使用Docker安装RabbitMQ之前,我们先简单的了解一下几个概念:什么...

RabbitMQ工作方式

RabbitMQ工作方式: 工作队列模式 发布订阅模式 路由模式 通配符模式 header转发模式 RPC远程过程调用模式   作者:wondream322 来源链接:https://blog.csdn.net/wang386476890/art...

Linux系统Centos7安装RabbitMQ使用压缩包配置环境变量RabbitMQ 3.8.16.tar.xz Erlang 24

Linux系统Centos7安装RabbitMQ使用压缩包配置环境变量RabbitMQ 3.8.16.tar.xz Erlang 24

文件的下载1、创建两个安装信息的存放文件夹sudo mkdir /usr/local/rabbitmqsudo mkdir /usr/local/erlang  2、下载rabbitmq和erlangcd /usr/local/rab...

centos7 yum安装rabbitmq-server

centos7 yum安装rabbitmq-server

一、查看支持rabbitmq-server的软件包并安装 yum provides rabbitmq-server yum install rabbitmq-server yum安装时安装了其他依赖 二、启动rabbitmq-server...

RabbitMQ消息堆积问题

RabbitMQ消息堆积问题

当生产者发送消息的速度超过了消费者处理消息的速度,就会导致队列中的消息堆积,直到队列存储消息达到上限。最早接收到的消息,可能就会成为死信,会被丢弃,这就是消息堆积问题。 解决消息堆积有三种思路: 增加更多消费者,提高消费速度 在消费者...

RabbitMq的一些概念,持久化、队列排他、自动删除、消息确认机制、消息ACK、消费消息的模式

一、队列持久化的概念 队列的声明默认是存放到内存中的,如果rabbitmq重启会丢失,如果想重启之后还存在就要使队列持久化,保存到Erlang自带的Mnesia数据库中,当rabbitmq重启之后会读取该数据库。 二、排他 简单理解就是在连接关闭时是否会删除队列...

RabbitMQ详解(一)

RabbitMQ详解(一)

一、消息队列相关概念 二、安装rabbitmq 三、配置rabbitmq 四、运行时参数配置 五、rabbitmq集群 一、消息队列相关概念 消息中间件: AMQP:高级消息队列协议  MQ是消费...

RabbitMQ集群搭建和测试总结

RabbitMQ集群搭建和测试总结

RabbiMQ简介 RabbitMQ是用Erlang开发的,集群非常方便,因为Erlang天生就是一门分布式语言,但其本身并不支持负载均衡。 RabbitMQ模式 RabbitMQ模式大概分为以下三种: (1)单一模式。 (2)普通模式...

windows 安装 RabbitMQ的安装包

安装RabbitMQ需要先安装对于版本的erlang,而erlang官网下载贼慢,现在就分享一下24版本的erlang和3.9版本的RabbitMQ的windows安装包。 都在我的微云上了: 文件分享 windows上安装和配置的方法见: windows...

RabbitMq详细介绍以及各种模式使用

RabbitMq详细介绍以及各种模式使用

转载:https://blog.csdn.net/zpcandzhj/article/details/81436980 5.2.简单队列 5.2.1.图示 P:消息的生产者 C:消息的消费者 红色:队列 生产者将消息发送到队列,消费者从队列中获取消息。 5...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。