由于rabbitmq是由erlang语言开发,所以需要先安装erlang
1、下载erlang文件
cd /usr/local/
wget http://erlang.org/download/otp_src_19.3.tar.gz
tar -zxvf otp_src_19.3.tar.gz
然后得到一个文件夹 otp_src_19.3
2、编译安装
cd otp_src_19.3
编译,指定安装目录为 /usr/local/erlang:
./configure --prefix=/usr/local/erlang
安装:
make
make install
安装成功之后,进入安装目录的bin目录,执行命令:
cd /usr/local/erlang/bin ./erl
出现下面信息,表示erlang安装成功,按两次Ctrl+C退出
Erlang/OTP 20 [erts-9.1] [source] [64-bit] [smp:1:1] [ds:1:1:10] [async-threads:10] [hipe] [kernel-poll:false] Eshell V9.1 (abort with ^G) 1>
3、配置环境变量
vim /etc/profile
在文件末尾添加以下代码:
export ERLANG_DIR=/usr/local/erlang export PATH=$PATH:${ERLANG_DIR}/bin
保存退出,
source /etc/profile
使刚刚配置的环境变量生效
二、安装rabbitmq
1、下载rabbitmq安装文件
cd /usr/local wget http://www.rabbitmq.com/releases/rabbitmq-server/current/rabbitmq-server-generic-unix-3.6.14.tar.xz
待下载完成,
2、解压安装
xz -d rabbitmq-server-generic-unix-3.6.14.tar.xz rabbitmq-server-generic-unix-3.6.14.tar.xz变成了rabbitmq-server-generic-unix-3.6.14.tar
解压缩:
tar -xvf rabbitmq-server-generic-unix-3.6.14.tar
得到 rabbitmq_server-3.6.14 目录
将此目录重命名:
mv rabbitmq_server-3.6.14 rabbitmq cd rabbitmq/sbin
启动rabbitmq-server:
./rabbitmq-server detached
屏幕显示以下信息:
RabbitMQ 3.6.14. Copyright (C) 2007-2017 Pivotal Software, Inc. ## ## Licensed under the MPL. See http://www.rabbitmq.com/ ## ## ########## Logs: /usr/local/rabbitmq/var/log/rabbitmq/rabbit@localhost.log ###### ## /usr/local/rabbitmq/var/log/rabbitmq/rabbit@localhost-sasl.log ########## Starting broker... completed with 0 plugins.
表示rabbitmq安装成功
3、配置环境变量
然后配置rabbitmq环境变量
vim /etc/profile
在文件末尾添加下面两行代码:
export RABBITMQ_DIR=/usr/local/rabbitmq export PATH=$PATH:${RABBITMQ_DIR}/sbin
保存退出,
source /etc/profile
使刚刚配置的环境变量生效
4、rabbitmq启动、停止
启动:rabbitmq-server detached 停止:rabbitmqctl stop 状态:rabbitmqctl status
5、rabbitmq插件
启用插件:
rabbitmq-plugins enable rabbitmq_management
然后访问http://localhost:15672即可,ip地址这里,根据自己的实际ip地址输入
6、配置远程访问
Rabbitmq登录默认账号和密码都是:guest
默认远程是不可访问的,需要配置用户权限,
添加用户:rabbitmqctl add_useradmin admin 添加权限:rabbitmqctl set_permissions -p "/" admin".*" ".*" ".*" 修改用户角色为管理员:rabbitmqctl set_user_tags adminadministrator
然后就可以用刚刚添加的用户和账号admin进行登录了
7、rabbitmq常用命令
add_user <UserName> <Password> delete_user <UserName> change_password <UserName> <NewPassword> list_users add_vhost <VHostPath> delete_vhost <VHostPath> list_vhostsset_permissions [-p <VHostPath>] <UserName> <Regexp> <Regexp> <Regexp> clear_permissions [-p <VHostPath>] <UserName> list_permissions [-p <VHostPath>] list_user_permissions <UserName> list_queues [-p <VHostPath>] [<QueueInfoItem> ...] list_exchanges [-p <VHostPath>] [<ExchangeInfoItem> ...] list_bindings [-p <VHostPath>] list_connections [<ConnectionInfoItem> ...]
三、安装rabbitmq的PHP扩展
1、先安装rabbitmq-c
cd /usr/local wget https://github.com/alanxz/rabbitmq-c/releases/download/v0.7.1/rabbitmq-c-0.7.1.tar.gz tar -zxvf rabbitmq-c-0.7.1.tar.gz cd rabbitmq-c-0.7.1/ ./configure --prefix=/usr/local/rabbitmq-c make make install
2、安装amqp(rabbitmq的PHP扩展)
cd /usr/local wget https://pecl.php.net/get/amqp-1.9.3.tgz tar -zxvf amqp-1.9.3.tgz cd amqp-1.9.3 phpize ./configure
--with-php-config=/usr/local/php/bin/php-config --with-librabbitmq-dir=/usr/local/rabbitmq-c make make install
安装成后得到扩展目录:/usr/local/php/lib/php/extensions/no-debug-non-zts-20131226/
将目录下的amqp.so加到php配置文件:
vim /usr/local/php/etc/php.ini
在文件末尾加上下面一行代码:
extension = amqp.so
保存退出,重启php,看到phpinfo的页面多了amqp一栏
四、rabbitmq+PHP代码实践
编辑生产者php文件producer.php
<?php /** * 生产者 */ //配置信息 $conn_args = array( 'host' => '127.0.0.1', 'port' => '5672', 'login' => 'admin', 'password' => 'admin', 'vhost' => '/' ); $e_name = 'e_ashine';//交换机名 $k_route = 'ashine_1';//路由key //创建连接和channel $conn = new AMQPConnection($conn_args); if (!$conn->connect()) { die("cannot connect to the broker!\n"); } $channel = new AMQPChannel($conn); //创建交换机对象 $ex = new AMQPExchange($channel); $ex->setName($e_name); //发送消息 for ($i = 0; $i < 500000000000; $i++) { //消息内容 $message = "now time is: " . date('Y-m-d H:i:s') . '.'; echo "Send Message:" . $ex->publish($message, $k_route) . "\n"; sleep(5); } $conn->disconnect(); ?>
编辑消费者php文件consumer.php
<?php /* *消费者 */ //配置信息 $conn_args = array( 'host' => '127.0.0.1', 'port' => '5672', 'login' => 'admin', 'password' => 'admin', 'vhost' => '/' ); $e_name = 'e_ashine';//交换机名 $q_name = 'q_ashine';//队列名 $k_route = 'ashine_1';//路由key //创建连接和channel $conn = new AMQPConnection($conn_args); if (!$conn->connect()) { die("cannot connect to the broker!\n"); } $channel = new AMQPChannel($conn); //创建交换机 $ex = new AMQPExchange($channel); $ex->setName($e_name); $ex->setType(AMQP_EX_TYPE_DIRECT); //direct类型 $ex->setFlags(AMQP_DURABLE);//持久化 echo "Exchange Status:" . $ex->declareExchange() . "\n"; //创建队列 $q = new AMQPQueue($channel); $q->setName($q_name); $q->setFlags(AMQP_DURABLE);//持久化 echo "Message Total:" . $q->declareQueue() . "\n"; //绑定交换机与队列,并指定路由键 echo 'Queue Bind:' . $q->bind($e_name, $k_route) . "\n"; //阻塞模式接收信息 echo "Message:\n"; while (True) { $q->consume('processMessage'); } $conn->disconnect(); //处理消息回调函数 function processMessage($envelope, $queue) { $msg = $envelope->getBody(); echo $msg . "\n";//处理消息 $queue->ack($envelope->getDeliveryTag()); } ?>
编辑代码完成在之后,用两个窗口,分别执行生产者和消费者的php文件
先让消费者跑起来:
然后再跑生产者:
现在生产者已经在生产了,切换到第一个界面,会看到消费者不断的将生产者产生的消息取出来: