有项目用到过rabbitmq 是技术负责人搭建好环境,今天自己在本地(ubuntu)开发,重新搞了下 ,在网上查了下资料,把安装重点记录下来
项目开发语言PHP 需要与一台rabbitmqserver通信,即php server程序向消息队列服务器发送任务消息,php client程序从消息队列服务器获取任务信息 不断执行,一个典型的生产者和消费者流水线
一、搭建rabbitmq-server
本文记录的重点是如何安装PHP的AMQP拓展 所以,如何搭建rabbitmq-server 则简略带过,我通过docker 已经构建了一个简易的rabbitmq-server镜像
构建rabbitmqserver的dockerfile地址在这里 这是在网上找到的rabbitmq的到的dockerfile 自己改造了下 能够快速搭建服务器
1、下载rabbitmqsqlver 的dockerfile 进入Dockerfile所在目录 执行下列命令 make 内已经包含了docker build命令 会生成一个rabbitmq:server的镜像
sudo make
2、镜像生成完毕 创建并运行容器
sudo docker run -p 5672 -p 15672 -d --name rabbitmq-server rabbitmq:server
3、从浏览器输入 http://localhost:15672 进入server的管理界面 帐号密码默认为 guest:guest
进入管理界面后 创建普通用户 并给普通用户赋予vhost的权限 创建exchange quene route-key 等操作 把exchange和quene绑定好 细节可查询rabbitmq的详细概念
如此 一个rabbitmq 的server便创建成功
二、给PHP安装AMQP拓展
为什么要安装AMQP拓展?
因为rabbitmq是一个实现了 AMQP协议的软件,AMQP是一个消息协议,所以PHP要和rabbitmq通信,需要实现AMQP协议,那么安装AMQP拓展的依赖关系大致如下
PHP连接rabbitmq-->依赖于PHP-AMQP拓展---->AMQP拓展是用C语言编写的PHP拓展 ,其底层调用的是librabbitmq-c-xxx这样一个为C语言编写的客户端库
所以安装AMQP拓展 就必须先安装rabbitmq-c这个为C语言编写的库软件
了解了这个关系 ,就明白了为什么只安装PHP-AMQP不行,而且 PHP-AMQP与rabbitmq-c的版本也是有对应要求的
我们这里安装的PHP-AMQP拓展是1.7.1 安装过程中 先执行了 sudo apt-get install librabbitmq-dev 该命令即安装librabbitmq-c-0.4.1 但是 由于PHP-AMQP-1.7.1必须要在librabbitmq-0.5以上版本才能使用(也就是说AMQP调用了新版本的一些特性,不支持老版本),所以我就去了网上下载了librabbitmq目前的最新稳定版 librabbitmq-0.8.1
这就是 amqp-1.7.1 搭配 librabbitmq-c-0.8.0(0.5以上 都可以)版本的原因
版本的依赖关系说清楚了 现在就可以下载这两个软件了
下载链接: amqp-1.7.1
1、安装librabbitmq-c-0.8.0
解压下载的文件后 进入该目录
./configure --prefix=/usr/local/rabbitmq-c-0.8.0
make
make install
该处指定了 安装路径 是为后续用到
2、安装AMQP拓展
进入解压的该目录下(phpize 可能需要安装php-dev)
phpize
./configure --with-amqp --with-librabbitmq-dir=/usr/local/rabbitmq-c-0.8.0
make
make install
3、安装成功后,修改php.ini配置文件 在拓展的地方增加
extension=amqp.so
重启服务器 脚本通过phpinfo(); 发现amqp 则拓展安装成功 ,
这是则可以连接刚才第一步创建的rabbitmq服务器来做测试了,就不多说
4、把上述安装过程整理到dockerfile文件中 ,就完成了docker容器的封装
如下为一个简单的集成了apache - php--rabbitmq--mssql等拓展的服务器容器构建文件 该镜像包含了一些基础镜像
这是github上我目前做的一些初步测试 ,能看到我的小实验成功
FROM ubuntu:1404-163
MAINTAINER apache-php qiang <xx@xx.xx>
# Install base packages
RUN apt-get update && \
DEBIAN_FRONTEND=noninteractive apt-get -yq install \
curl \
apache2 \
libsybdb5 \
freetds-common \
libapache2-mod-php5 \
php5-mysql \
php5-mcrypt \
php5-gd \
php5-curl \
php5-sybase \
php5-dev \
php-pear \
php-apc && \
rm -rf /var/lib/apt/lists/*
#compile amqp
ADD amqp-1.7.1.tgz /tmp/
ADD rabbitmq-c-0.8.0.tar.gz /tmp/
WORKDIR /tmp/rabbitmq-c-0.8.0
RUN ./configure --prefix=/usr/local/rabbitmq-c-0.8.0 && \
make && \
make install
WORKDIR /tmp/amqp-1.7.1
RUN phpize
RUN ./configure --with-amqp --with-librabbitmq-dir=/usr/local/rabbitmq-c-0.8.0 && \
make && \
make install
RUN sed -i "s/; extension=msql\.so/extension=amqp.so/g" /etc/php5/apache2/php.ini
# curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
RUN /usr/sbin/php5enmod mcrypt
RUN echo "ServerName localhost" >> /etc/apache2/apache2.conf && \
sed -i "s/variables_order.*/variables_order = \"EGPCS\"/g" /etc/php5/apache2/php.ini
ENV ALLOW_OVERRIDE **True**
# Add image configuration and scripts
ADD run.sh /run.sh
RUN chmod 755 /*.sh
ADD vhost.conf /etc/apache2/sites-available/vhost.conf
# Configure /app folder with sample app
RUN mkdir -p /app && rm -fr /var/www/html && ln -s /app /var/www/html
ADD sample/ /app
RUN a2enmod vhost_alias
RUN a2ensite vhost
VOLUME ["/etc/apache2","/etc/php5"]
EXPOSE 80
WORKDIR /app
CMD ["/run.sh"]